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

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C#中內(nèi)置的泛型委托Func與Action

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

簡介

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

Func委托

說明

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

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

原型如下所示:

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

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

那么這個(gè)內(nèi)置泛型委托的圖解如下:

示例

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

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

Func<stringstring> selector;

然后創(chuàng)建委托實(shí)例,并添加第一個(gè)方法:

 selector= str => str.ToUpper();

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

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

這個(gè)委托對(duì)象的圖解如下所示:

調(diào)用這個(gè)委托對(duì)象:

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

結(jié)果如下所示:

其實(shí)也可以直接在select中直接寫一個(gè)lambda表達(dá)式,這種方式更常見:

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

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

輸出結(jié)果如下所示:

其實(shí)是一樣的。

查看select方法說明:

它的參數(shù)類型就是一個(gè)參數(shù)類型為string返回值類型為string的內(nèi)置func委托類型。

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

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

Action委托

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

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

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

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

它的圖解如下所示:

示例

聲明委托類型的變量:

Action<string> action;

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

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

但是一般可以合為一步:

Action<string> action = showMessage;

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

調(diào)用委托:

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

    action(word);
}

輸出結(jié)果如下所示:

image-20231204150654969

但是可以發(fā)現(xiàn)我們的代碼寫的還不構(gòu)簡潔,用到了另外聲明的方法,其實(shí)可以用Lambda表達(dá)式來寫方法,不需要自己另外寫:

 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);
     }
 }

輸出結(jié)果如下所示:

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

ref

Action Delegate (System) | Microsoft Learn

Func Delegate (System) | Microsoft Learn


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