1. ホーム
  2. c#

[解決済み】Foreachループ、ループの最後の反復がどれかを判断する

2022-04-02 03:10:49

質問

を持っています。 foreach のループで、最後の項目が選択されたときに何らかのロジックを実行する必要があります。 List , 例:

 foreach (Item result in Model.Results)
 {
      //if current result is the last item in Model.Results
      //then do something in the code
 }

forループやカウンタを使わずに、どのループが最後かを知ることはできますか?

どのように解決するのですか?

最後の要素で何かをする必要がある場合(何かとは異なり を最後の要素とする場合、LINQを使用すると便利です。

Item last = Model.Results.Last();
// do something with last

もし、最後の要素で何か違うことをする必要があるのなら、次のようなものが必要です。

Item last = Model.Results.Last();
foreach (Item result in Model.Results)
{
    // do something with each item
    if (result.Equals(last))
    {
        // do something different with the last item
    }
    else
    {
        // do something different with every item but the last
    }
}

が返す項目と同じものであることを確認するためには、おそらくカスタムの比較器を書く必要があるでしょうが。 Last() .

この方法は、以下のように慎重に使用する必要があります。 Last は、コレクションを繰り返し処理しなければならないかもしれません。小さなコレクションでは問題にならないかもしれませんが、大きくなるとパフォーマンスに影響が出るかもしれません。また、リストに重複する項目がある場合にも失敗します。このような場合は、次のような方法がより適切でしょう。

int totalCount = result.Count();
for (int count = 0; count < totalCount; count++)
{
    Item result = Model.Results[count];

    // do something with each item
    if ((count + 1) == totalCount)
    {
        // do something different with the last item
    }
    else
    {
        // do something different with every item but the last
    }
}