除了void型以外,其它類型的表達式,使用三元運算符就沒有問題。下面的代碼在編譯和執行時就沒有問題。
1using System;
2
3class Program
4{
5 static void Main(string[] args)
6 {
7 Func<int, bool> method = (year) =>
8 year < 1994 ? year % 4 == 0 : year % 4 == 2;
9
10 Console.WriteLine("冬奧會年份");
11 for (int i = 1988; i < 1999; i++)
12 {
13 Console.WriteLine("{0}年={1}", i, method(i));
14 }
15 // 輸出:
16 // 冬奧會年份
17 // 1988年=True
18 // 1989年=False
19 // 1990年=False
20 // 1991年=False
21 // 1992年=True
22 // 1993年=False
23 // 1994年=True
24 // 1995年=False
25 // 1996年=False
26 // 1997年=False
27 // 1998年=True
28 }
29}
30
List14 使用三元運算符的Lambda表達式
代入變量method的Lambda表達式,判斷參數的年份是不是冬奧會舉行的年份,1994年以後,因為是兩年舉行一屆,所以判斷方式也要改變。這種情況下,當然是三元運算符派上用場的時候。總之,這種程度的問題,用表達式形式的Lambda就比較容易寫。
不用類型聲明的情況和必須類型聲明的情況
大部分情況下,Lambda表達式的參數類型都可以省略。然而,Lambda表達式的使用也存在限制,不能推定出類型的情況下就不能用Lambda表達式。
例如,Lambda表達式就不能代入到使用var關鍵字隱式類型聲明的局部變量:
var Lambda = (int x) =>x *2;
上面的代碼會產生“Lambda表達式局部變量隱式的類型聲明不會起作用”的錯誤。避免錯誤的方法是不要用var,而是明確的進行類型聲明。