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

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

編輯:關於C語言

然而,下面的例子

1using System;
 2
 3delegate int delegate1( int x );
 4delegate int delegate2( string s );
 5
 6class Program
 7{
 8  private static void sample(delegate1 method)
 9  {
10    Console.WriteLine("void Sample(delegate1 method)");
11  }
12
13  private static void sample(delegate2 method)
14  {
15    Console.WriteLine("void Sample(delegate2 method)");
16  }
17
18  static void Main(string[] args)
19  {
20    sample((int x) => 0);
21    // sample((x) => 0); // 如果沒有參數類型聲明會產生錯誤
22  }
23}
24

List 15 必須指定參數類型的情況

這個例子中,“sample((x)=> 0”會產生編譯錯誤。滿足條件的sample方法有兩個,所有就不能確定究竟應該使用哪個。然而,在參數前加上類型聲明“sample((int x) => 0”,就能夠編譯執行。因為參數類型的指定,在2個sample方法中,有一個與之類型相吻合,所以以此為依據就能夠選擇了。

什麼都不做的Lambda表達式

這個話題說到此,還有盲點。這裡先說明一下什麼都不做的Lambda表達式的寫法。

Lambda表達式沒有返回值的情況(void的情況),想使其內容為空的情況下(調用後什麼也不執行的Lambda表達式選擇使用的情況),可以使用內容為空的Lambda語句。

例如,下面這個的Lambda表達式:

(x) => { };

這樣用Lambda表達式重構,解決了“引入了null值對象”的問題。一句話,不應該用null表示什麼也不做的表達式,而是采用調空Lambda表達式的手法。

簡單的說,分別用代碼來展示能夠使用和不能夠使用這個技術的場合。

首先,說說不能夠使用該技術的場合。下面的代碼,因為什麼也不需要處理,所以用null值表示的例子。Sample方法的參數action,僅在值不為null的情況下被調用。

using System;

class Program
{
  private static void Sample(Action<string> action)
  {
    if (action != null) action("Hello!");
  }

  static void Main(string[] args)
  {
    Action<string> action = null;
    Sample(action);

    action = (x) => Console.WriteLine(x);
    Sample(action); // 輸出:Hello!
  }
}

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