2011-05-20 50 views
3

有一個動作的委託,並試圖使用三元運算它裏面有lambda表達式:Action裏面<T>三元操作符不工作

Action<string> action = new Action<string>(str => (str == null) ? 
       Console.WriteLine("isnull") : Console.WriteLine("isnotnull") 

給人的老「只有分配,遞減等入內」的錯誤。

這是可能以某種方式?

回答

5

你將不得不做這樣的:

var action = new Action<string>(str => Console.WriteLine((str == null) ? "isnull" : "isnotnull")); 
+0

非常感謝! – 2011-05-20 23:40:04

2
Action<string> action = new Action<string>(str => 
        { 
         if (str == null) 
          Console.WriteLine("isnull"); 
         else 
          Console.WriteLine("isnotnull"); 
        }); 
+0

你確定嗎?我認爲這會吐出一些關於「空洞」的不平等或類似的東西...... – Reddog 2011-05-20 23:39:58

+1

並且問題具體是關於三元運算符。 – 2011-05-20 23:40:26

+0

Aaaah,更好,剛剛得到您的編輯!是的,那也可以。 – Reddog 2011-05-20 23:40:33

1

我相信三元操作員返回的東西。在你的情況下,它不會返回任何東西,只是執行一個語句。正如Reddog所說,你必須把你的三元組放在Console.WriteLine調用中,這實際上代碼更少:)

0

問題不在於lambda,而在於三元運算符中的第二個和第三個表達式必須返回一些東西。 Console.WriteLinevoid返回類型,因爲您正在嘗試使用而無法使用。解決的辦法是,將通話中三元運營商Console.WriteLine

Console.WriteLine(str == null ? "isnull" : "isnotnull") 

您可以在拉姆達使用此表達式。