1. ホーム
  2. c#

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

2022-02-15 23:21:17

質問

を持っています。 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
    }
}