狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

C#中內置的泛型委托Func與Action

admin
2024年1月24日 15:5 本文熱度 652

簡介

從C# 3.0起很少需要自己聲明委托。System.Func 是一個泛型委托,它可以表示帶有返回值的方法。它可以接受一個到多個輸入參數,并返回一個指定類型的結果。System.Func 委托的最后一個類型參數表示方法的返回值類型。而System.Action系列代表返回void的方法。

Func委托

說明

Func委托有很多種形式,如下所示:

這里以Func<T,TResult>為例說明該委托的用法。

原型如下所示:

public delegate TResult Func<in T,out TResult>(T arg);

結合前面文章委托(一)中對于委托類型的圖解:

那么這個內置泛型委托的圖解如下:

示例

依據前面的文章委托(一)中使用委托的步驟來說明這個內置泛型委托的用法:

由于這個是內置的泛型委托,包含在System.Runtime.dll程序集中,不是自定義的委托類型,因此不需要自己聲明這個委托類型,而是聲明這個泛型委托變量:

Func<stringstring> selector;

然后創建委托實例,并添加第一個方法:

 selector= str => str.ToUpper();

這里使用了lambda表達式,以后再進行解釋。這里將聲明委托變量與實例化分開了,一般可以將這兩個步驟合并,如下所示:

 Func<stringstring> selector = str => str.ToUpper();

這個委托對象的圖解如下所示:

調用這個委托對象:

 string[] words = { "orange""apple""Article""elephant" };
   
 IEnumerable<String> aWords = words.Select(selector);
 
  foreach (String word in aWords)
     Console.WriteLine(word);

結果如下所示:

其實也可以直接在select中直接寫一個lambda表達式,這種方式更常見:

string[] words = { "orange""apple""Article""elephant" };
  
IEnumerable<String> aWords = words.Select(x => x.ToUpper());

 foreach (String word in aWords)
    Console.WriteLine(word);

輸出結果如下所示:

其實是一樣的。

查看select方法說明:

它的參數類型就是一個參數類型為string返回值類型為string的內置func委托類型。

Lambda表達式的類型是由編譯器隱式推斷的,它通常表示為委托類型或表達式樹類型,具體取決于上下文。最常見的用法是將Lambda表達式賦值給委托類型或傳遞給接受委托類型參數的方法。

以上就是C#中的內置泛型委托func的介紹與用法示例,希望對你有所幫助。

Action委托

Action委托也有很多形式,如下所示:

本文以Action<T>這種形式來說明C#中內置的泛型Action委托的用法。

該委托類型的原型如下所示:

public delegate void Action<in T>(T obj);

它的圖解如下所示:

示例

聲明委托類型的變量:

Action<string> action;

實例化該委托變量,即為委托添加方法:

void showMessage(string message)
{
    Console.WriteLine(message);
}
action = showMessage;

但是一般可以合為一步:

Action<string> action = showMessage;

void showMessage(string message)
{
    Console.WriteLine(message);
}         

調用委托:

string[] words = { "orange""apple""Article""elephant" };
foreach(var word in words) 

    action(word);
}

輸出結果如下所示:

image-20231204150654969

但是可以發現我們的代碼寫的還不構簡潔,用到了另外聲明的方法,其實可以用Lambda表達式來寫方法,不需要自己另外寫:

 static void Main(string[] args)
 {
     Action<string> action = (x) => 
     {
         Console.WriteLine(x);
     };
          
     string[] words = { "orange""apple""Article""elephant" };
     foreach(var word in words) 
     { 
         action(word);
     }
 }

輸出結果如下所示:

以上就是C#中的內置泛型委托Action的介紹與用法示例,希望對你有所幫助。

ref

Action Delegate (System) | Microsoft Learn

Func Delegate (System) | Microsoft Learn


該文章在 2024/1/24 15:05:58 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved