首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 3.0 入門【Lambda 表達式】第四章(三):三元運算子在 Lambda 中的應用與 void 型別限制

     編輯:關於C語言

非 void 型別:三元運算子完美適用

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 年前四年一屆、後兩年一屆,三元運算子優雅表達分段邏輯。

void 型別:三元運算子無法使用

// 錯誤嘗試
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 建議直接用語句本體 { },避開三元運算子型別推斷陷阱。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved