C# Foreach ループでの反復インデックスへのアクセス
foreach
ループは、コレクションを反復処理するために C# で頻繁に使用されます。 ただし、標準の foreach
ループ内で反復インデックスに直接アクセスすることは、直接サポートされていません。 この記事では、これを達成するための効率的な方法について概説します。
インデックス アクセスに LINQ を利用する
LINQ の Select()
メソッドは、クリーンなソリューションを提供します。 Phil Haack のブログの Ian Mercer による投稿に示されているように、このアプローチではアイテムとそのインデックスの両方を取得できます。
<code class="language-csharp">foreach (var item in Model.Select((value, i) => new { i, value })) { var value = item.value; var index = item.i; }</code>
Select()
メソッドのラムダ式は、値とそのインデックス (i
) という 2 つのパラメーターを取ります。 両方を保持するために、新しい匿名オブジェクトが作成されます。
ValueTuple によるパフォーマンスの向上 (C# 7.0 以降)
特に大規模なコレクションの場合のパフォーマンスを向上させるために、ValueTuple
はより効率的な代替手段を提供します。
<code class="language-csharp">foreach (var item in Model.Select((value, i) => (value, i))) { var value = item.value; var index = item.i; }</code>
これにより、匿名オブジェクトが ValueTuple
に置き換えられ、オーバーヘッドが削減されます。
構造化による可読性の向上 (C# 7.0 以降)
コードの明瞭性をさらに高め、代入を分割することでインデックスと値へのアクセスが簡素化されます。
<code class="language-csharp">foreach (var (value, i) in Model.Select((value, i) => (value, i))) { // Access `value` and `i` directly. }</code>
これにより、明示的な item.value
および item.i
アクセスが不要になります。 この方法は、ValueTuple
のパフォーマンス上の利点とコードの可読性の向上を組み合わせたものです。 これらの手法は、C# の foreach
ループ内で反復インデックスを管理するための効果的かつ効率的な方法を提供します。
以上がC#foreachループで反復インデックスを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。