程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> [C# 3.0 入門] [第一章 Lambda表達式] 第四節(2)

[C# 3.0 入門] [第一章 Lambda表達式] 第四節(2)

編輯:關於C語言

 

List12 使用三元運算符(?:)的Lambda表達式

但是,前一章的List10的例子裡,其中的if語句中就不能改用三元運算符來替換。如果試圖替換的話就是以下情況:

using System;

class Program
{
  static void Main(string[] args)
  {
    Action<string> method = (filename) =>
      filename == null
        ? Console.WriteLine("Hello!")
        : System.IO.File.WriteAllText(filename, "Hello!");

    method(null);
    method("hello.txt");
  }
}

List13 List10中用三元運算符改寫後(產生編譯錯誤)

這個代碼,會產生以下的編譯錯誤:

error CS0201: 只有 assignment、call、increment、decrement 和 new 對象表達式可用作語句。

error CS0173: 無法確定條件表達式的類型,因為“void”和“void”之間沒有隱式轉換。

這並不是說Lambda表達式不能調用具有void返回值的方法。下面的代碼就沒有問題。

Action<string> method =
  (filename) => System.IO.File.WriteAllText(filename, "Hello!");

這裡產生error的原因是,三元運算符的第二個、第三個運算數不能寫成void類型的表達式(因為這樣寫,void沒法隱式轉換成第二個、第三個運算數的類型,所以整個表達式的類型就無法判斷了。

因為存在這樣的問題,有void類型的返回值的表達式情況下,三元運算符使用就很困難。其實,void返回值的表達式很難理解,不能寫反而是個好事。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved