Func<int, bool> isWinterOlympic = year =>
year < 1994 ? year % 4 == 0 : year % 4 == 2;
for (int i = 1988; i < 1999; i++)
Console.WriteLine($"{i}年={isWinterOlympic(i)}");
/* 輸出:
1988年=True 1992年=True 1994年=True 1998年=True
其餘 False */
1994 年前四年一屆、後兩年一屆,三元運算子優雅表達分段邏輯。
// 錯誤嘗試
Action<string> method = filename =>
filename == null
? Console.WriteLine("Hello!")
: System.IO.File.WriteAllText(filename, "Hello!");
// 編譯錯誤 CS0173:無法確定條件運算式型別,void 無隱含轉換
原因:三元運算子第二/三運算元必須有共同型別或隱含轉換,void 無型別,無法推斷整體運算式型別。
Action<string> method = filename =>
{
if (filename == null) Console.WriteLine("Hello!");
else System.IO.File.WriteAllText(filename, "Hello!");
};
// 或單純委派
Action<string> method = filename => System.IO.File.WriteAllText(filename, "Hello!");
void 回傳的 Lambda 建議直接用語句本體 { },避開三元運算子型別推斷陷阱。