2016-11-13 16 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()を作成してヒット数を増やす必要があります。 – Icepickle

+1

['.Count'](https://msdn.microsoft.com/en-us/library/bb535181 = vs.100).aspx)は、述語に一致する要素を数える良い方法です。実行の遅延や余分なリストを作成することはありません。 – kevingessner

答えて

3

は、基本的にはあなたのケースでは、クエリは、その単純なSelectretrunを実行していない、どちらかは、実際にクエリを実行するか、値Yesを持つアイテムを実行するために何かを行うことができ、クエリの最後にToList()を追加する必要があります。この場合、Countを使用する方がはるかに高速です。

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

または使用にのみ、クエリを作成Where句とCount

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

お電話の場合は、SELECT文はのみ、クエリを作成します。

result.ToList(); 

それは、クエリの列挙を強制し、カウンタが更新されます。

関連する問題