2016-02-07 17 views
0

比方說有產生質數的函數:列表爲空時`Enumerable.All`中lambda的x值是什麼?

static void Main() { 
    var n = 10; 

    var primeNumbers = new List<int>(); 
    int current = 2; 


    // Console.WriteLine(primeNumbers.All((x) => current % x != 0)); 
    while (primeNumbers.Count <= n) { 
     if (primeNumbers.All((x) => current % x != 0)) { 
      primeNumbers.Add(current); 
      Console.WriteLine("Prime number: " + current); 
     } 

     current++; 
    } 
} 

在第一個迭代中while列表是空的。爲什麼方法Enumerable.All返回True(序列的所有元素都滿足條件current % x != 0)。什麼值x

+1

沒有任何元素不會滿足謂詞... –

回答

3

爲什麼你true原因是由documentation提供:

true如果源序列的每個元素都通過了指定謂詞的測試,或者如果序列是空的;否則,false

這在邏輯上也有意義,因爲All應該與!Any(...)表示相同的意思。由於Any將針對空收集評估爲false,因此在相同情況下All應評估爲true

+0

我知道這一點。但是有一個表達式'current%x!= 0',它在第一次迭代中變成'2%x!= 0'。爲了將第一個元素添加到列表中並增加'current',它必須通過'if'語句。但'2%1'或'2%0''!= 0'都不是。 –

+2

@ J.Doe - 如果列表爲空,則lambda永遠不會被調用,所以'x'永遠不會綁定任何東西。 'All'可以在不調用謂詞的情況下立即返回true。 – Lee

相關問題