2012-06-22 83 views
2

我想寫一個像下面這樣的lambda,但是我的語法不正確。Lambda在哪裏子句錯誤

Result = ListOfNumbers.Where(val => { val != Num1; val != Num2; }).ToList()[0]; 

我得到的錯誤是

並非所有的代碼路徑中 類型的lambda表達式返回一個值「System.Func <int,int,bool>

也許有這樣做的更好的辦法這...我知道ListOfNumbers中有數字1,2和3(按此順序)。此時Num1和Num2都將是1,2或3(儘管如此,它們不能相同)。我希望我的結果是來自ListOfNumbers的'其他'號碼。希望這是明確的。如果你能想到一個更好的方法,我很樂意聽到它。

有什麼想法?

+4

你的問題的標題無關與實際問題。請編輯標題,以便引用問題。 – Botz3000

+0

非常感謝抱歉,我沒有更新前一個問題的標題! – windowskm

回答

2

你需要將其更改爲

val => val != Num1 && val != Num2 

如果我寫你所提供的代碼,因爲這將是作爲一個功能,你可能會看到什麼是錯的:

public bool Predicate(int val) 
{ 
    val != Num1; 
    val != Num2; 
} 

iee - 返回聲明在哪裏?

雖然 - 注意,這實際上會失敗,錯誤Only assignment, call, increment, decrement, and new object expressions can be used as a statement編譯 - 在lambda表達式編譯器的規則略有不同,所以你得到一個不同的錯誤,但最終它是同一種原因 - 你的情況都不你的lambda路徑返回任何東西。

+0

最佳答案!謝謝 – windowskm

1

更改爲拉姆達:

ListOfNumbers.Where(val => val != Num1 && val != Num2) 
1

你真的想要這樣做嗎?

Result = ListOfNumbers.Where(val => val != Num1 && val != Num2).ToList()[0]; 

另外,如果列表沒有元素呢?您應該在通過索引訪問它之前檢查一下。

1

你所得到的錯誤,因爲裏面Where子句你沒有得到任何BOOL,您需要將您的lambda表達式更改爲:

Result = ListOfNumbers.Where(val => val != Num1 && val != Num2).ToList()[0]; 
0

當你的代碼預期System.Func<int,int,bool>委託返回布爾值,如在條件所以,你應該在以下方式進行定義:

Result = ListOfNumbers.Where(val => { val != Num1 && val != Num2; }).ToList()[0]; 
0

我想你想產生這樣的事:

Result = ListOfNumbers.Where(val => val != Num1 && val != Num2).ToList()[0]; 
0

如果您在lambda的empression中創建塊,則必須使用return語句(如果lambda定義了結果類型)。

如果您只想要第一個元素,您可以使用FirstOrDefault而不是Where

Result = ListOfNumbers.FirstOrDefault(val => val != Num1 && val != Num2); 

與塊:

Result = ListOfNumbers.FirstOrDefault(val => 
      { 
       var b = val != Num1 && val != Num2; 
       return b; 
      } 
     ); 

我用&&但我真的不知道你是什麼條件...