2016-11-13 47 views
1

關於下面的代碼的簡短問題。 爲什麼它總是顯示0?帶代表的Linq查詢不更新變量

List<string> strList = new List<string>() { "Yes", "No", "Yes", "No", "Yes", "Yes"}; 
int hitCount = 0; 
strList.Select(i => 
{ 
    if(i.Equals("Yes")) 
    { 
     hitCount++; 
    } 
    return i;   
}); 
Console.WriteLine(hitCount); // always returns 0. 
Console.Read(); 
+1

你只構造查詢,但從來沒有運行它。 – PetSerAl

+3

由於延遲執行,請在選擇後創建一個ToList(),並且它應該增加hitcount;) – Icepickle

+1

['.Count'](https://msdn.microsoft.com/en-us/library/bb535181(v = vs.100).aspx)是一個更好的方法來計算匹配謂詞的元素 - 沒有延遲的執行擔憂或額外的列表。 – kevingessner

回答

3

基本上你的情況的查詢沒有運行,它只是一個簡單的Selectretrun,要麼你必須在查詢的末尾添加ToList()實際運行查詢,也可以做別的事情來運行其價值Yes項目。在這種情況下使用Count要快得多。

int hitcount = strList.Count(p => p == "Yes"); 

或者使用可以使用Where條款和Count

hitcount = strList.Where(p => p == "Yes").Count(); 
1

SELECT語句只創建查詢,如果您撥打:

result.ToList(); 

這將迫使查詢計數,計數器將被更新。