C# プログラミング

【 C# / VB 】foreach ループ内の繰り返し回数を使う方法

今回はC#(ver.7.0以降)、VB(ver. 15以降)でforeachループ内で繰り返し回数を参照する方法について解説していきます。

従来の記述方法とよりスマートに記述する方法の2通りを以下になります。

C#VB

従来の記述方法

従来の記述方法は以下の通りです。

C#の場合

var collection = new Dictionary<string, string>(){
...省略...
};

int index = -1; //カウンター変数
foreach (var value in collection)
{
  index++;
  // indexを使った処理を書く...
}

VBの場合

Dim collection = New String() {...省略...}
Dim index As Integer = -1 ' カウンター変数
For Each value In collection
 index +=1
 ' indexを使った処理を書く...
Next


上記のようにループ外でカウンター変数を定義しておけば、

ループ内でインクリメント(カウンターを増やしていく)すれば実現可能ですが、

このやり方だとカウンター変数を用意したりインクリメント処理を記述する必要があり、可読性が低いというデメリットがあります。

LINQ Select拡張メソッド

LINQのSelect拡張メソッド(System.Linq名前空間のEnumerableクラス)を使うことで、

上記のようなカウンター変数やインクリメント処理を記述せずに済みます。

記述例は以下の通りです。

C#の場合

using System.Collections.Generic;
using System.Linq;

...省略...

IEnumerable<string> collection = ...省略...
foreach(var item in collection.Select((Value, Index) => new{ Value, Index }))
)
{
 string value = item.Value; //コレクションの要素
 int index = item.index; //ループのインデックス
}

VBの場合

Dim collection As IEnumerable(Of String) = ...省略...
For Each item In collection.Select(Function(Value, Index) New With {Value, Index})
 Dim value As String = item.Value ' コレクションの要素
 Dim index As Integer = item.Index ' ループのインデックス
Next

おすすめ記事はコチラ

スマレジ テックファーム 1

スマレジ テックファーム で Webエンジニアとして勤めている tomoです。 今回は株式会社スマレジや私が所属している 「 スマレジ テックファーム 」についてPRしていきたいと思います。 スマレジ ...

2

FromBody 属性を使用して、 ASP.NET Core(.NET 6)のWebAPIでBodyパラメータのJSONを受け取る方法を解説します。 FromBody 属性 POSTやGETで呼び出さ ...

PC picture 3

ASP.NET Core(.NET 6)でCookie認証のタイムアウトを設定する方法を解説します。 Cookieの有効期限について Cookieには通常はタイムアウト(有効期限)を設定します。 基本 ...

4

ASP.NET Core(.NET 6)でクロスオリジンリクエスト ( CORS )を設定する方法を解説します。 簡単に クロスオリジンリクエスト ( CORS )とは何かについても少し解説したいと思 ...

-C#, プログラミング
-, ,