2013-05-16 79 views
0

上面有一個通用列表。我正在使用Foreach來遍歷列表並執行我的操作。我有一個場景,如果列表的最後一個記錄是迭代的,我需要添加條件。確定列表中的最後一個值並添加條件

我打算做什麼?

我可以列表計數和遞減,並確定最後的記錄

foreach() 
{ 
Count--; //Where Row is the List Count 
if (Count >= 1) 
{ 
} 
} 

但是,什麼是我可以實現這個沒有計數,或者如果更加容易的選擇呢?

+1

這是什麼意思「添加條件」?順便說一句,你可以確定最後的'list.Last()' –

+0

我的意思是否則作爲添加條件 – user2067567

+1

對於這些類型的問題很多,你可能能夠重新解決這個問題,你需要做一些特別的事情爲* first *項目而不是* last *。如果你的問題可以適應這樣的變化,那麼處理起來要容易得多(只需要在循環結束時有一個你未設置的標誌) –

回答

0

您可以獲取最後一個項目的引用並在foreach中檢查。我會通過使用LINQ Last方法來做到這一點。事情是這樣的:

var lastitem = list.Last(); 
foreach (var item in list) { 
    if (item == lastItem) 
     // Do your specific check here. 
    else 
     // rest of the loop 
} 

但請記住,這一段代碼有以下限制:

  1. 它僅適用於引用類型而不是值類型。
  2. 同一個對象只能在列表中出現一次。

我提供此答案爲foreach在問題中使用。我自己會像在這個問題的其中一個評論中提到的那樣使用一個基於索引的循環並且顛倒這個列表,所以我可以首先處理「特定」的情況。

+0

,這可能會對值類型產生時髦的結果等,如果相同的值不止一次地出現在列表中,那麼第一個條件將會被多次碰到。 –

+0

這是真的。我將更新anwser注意限制:)。謝謝! – Rutix

0

您可以避免循環中的if條件,但您必須使用for語句,並且它只會讓您知道是否重複了最後一個元素。 如果您需要取消您的最後一個元素的迭代,這將是不相關的:

for(int i = 0; i < list.Count; i++) 
{ 
    // your operations 
} 

if (i == list.Count) // means you iterated your last element 
0

普查員不知道他們在迭代哪個元素的方式。因此,您將需要使用涉及條件​​語句的其他機制。

但是,由於您使用的是List<T>它支持索引簡單的方法是:

int finalIndex = list.Count - 1; 

for (int i = 0; i < list.Count; i++) 
{ 
    if (i == finalIndex) 
    { 
     // Perform required action 
    } 
} 
相關問題