ホームページ >バックエンド開発 >C++ >C#foreachループで反復インデックスを取得するにはどうすればよいですか?

C#foreachループで反復インデックスを取得するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-27 18:13:091024ブラウズ

How Do I Get the Iteration Index in a C# Foreach Loop?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。