国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C# 匿名方法和Lambda表達(dá)式

這篇具有很好參考價(jià)值的文章主要介紹了C# 匿名方法和Lambda表達(dá)式。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一.匿名方法

1.匿名方法的演變

匿名方法是為了簡(jiǎn)化委托的實(shí)現(xiàn),方便調(diào)用委托方法而出現(xiàn)的,同時(shí),匿名方法也是學(xué)好lambda表達(dá)式的基礎(chǔ)。在委托調(diào)用的方法中,如果方法只被調(diào)用一次,這個(gè)時(shí)候我們就沒(méi)有必要?jiǎng)?chuàng)建具名方法,從而用匿名方法更為方便。
下面一段代碼是聲明并使用了一個(gè)名稱(chēng)為Add20的方法(和之前的寫(xiě)法一樣)

namespace demo1_0726
{

    public delegate int OtherDel(int n);//聲明委托
    internal class Program
    {
        public static int Add20(int x)
        {
            return x + 20;
        }
        static void Main(string[] args)
        {
            OtherDel otherDel = new OtherDel(Add20);
            Console.WriteLine("{0}", otherDel(5));
            Console.WriteLine("{0}", otherDel(6));
            Console.ReadKey();
          
        }
      
    }
}

下面的一段代碼使用了匿名方法來(lái)替代Add20

namespace demo2_0726
{
    public delegate int OtherDel(int n);//聲明委托
    internal class Program
    {
     
        static void Main(string[] args)
        {
            OtherDel otherDel = delegate (int x)
                               {      
                                 return x + 20; 
                                };
            Console.WriteLine("{0}", otherDel(5));
            Console.WriteLine("{0}", otherDel(6));
            Console.ReadKey();

        }

    }
}

2.匿名方法的使用

可以在如下地方使用匿名方法
(1)聲明委托變量時(shí)作為初始化表達(dá)式
(2)組合委托時(shí)在賦值語(yǔ)句的右邊
(3)為委托增加事件時(shí)在賦值語(yǔ)句的右邊

3.匿名方法的語(yǔ)法

匿名方法表達(dá)式的語(yǔ)法包含如下部分:

//delegate類(lèi)型關(guān)鍵字
//參數(shù)列表,如果語(yǔ)句塊沒(méi)有使用任何參數(shù)則可以省略
//語(yǔ)句塊,包含了匿名方法的代碼
//關(guān)鍵字( 參數(shù)列表) { 語(yǔ)句塊 }
delegate (Parameters) {ImplementationCode}
1.返回類(lèi)型

匿名方法不會(huì)顯示聲明返回值。如果委托有void類(lèi)型的返回值,匿名方法就不能有返回值。

//這里委托類(lèi)型的返回類(lèi)型是整形
delegate int OtherDel(int InParam);
static void Main()
{
OtherDel del=delegate(int x)
             {
              return x+20;//返回一個(gè)整型值
              };
......              
}
2.參數(shù)

除了數(shù)組參數(shù),匿名方法的參數(shù)列表必須在以下3方面與委托匹配:
參數(shù)數(shù)量;參數(shù)類(lèi)型及位置;修飾符
以下情況,我們可以使圓括號(hào)為空或省略圓括號(hào)來(lái)簡(jiǎn)化匿名方法的參數(shù)列表(兩項(xiàng)同時(shí)成立)
1 委托的參數(shù)列表不包含任何out參數(shù)
2 匿名方法不使用任何參數(shù)
舉例

namespace demo2_0726
{
    public delegate void OtherDel(int n);//聲明委托
    internal class Program
    {
        static void Main(string[] args)
        {
            Program program = new Program();
            //OtherDel otherDel = delegate (int n)//可以寫(xiě)全
             OtherDel otherDel = delegate //也可以省略括號(hào)
             {
                program.sum();
                program.subtract();
            };
            otherDel(5);
            Console.ReadKey();
        }
        void sum()
        {
            int n = 4;
            n += 3;
        }
        void subtract()
        {
            int n = 4;
            n -= 2;
        }
    }
}
3.params參數(shù)

如果聲明委托的參數(shù)列表包含了params參數(shù),那么params關(guān)鍵字在匿名方法的參數(shù)列表中就會(huì)被省略:

delegate void SomeDel(int X,params int[] Y)//在委托聲明中使用params關(guān)鍵字
SomeDel mDel=delegate(int X, int[] Y)//在匹配的匿名方法中省略關(guān)鍵字
{
...
};

4.變量和參數(shù)的作用域

1 參數(shù)以及聲明在匿名方法內(nèi)部的局部變量的作用域限制在實(shí)現(xiàn)方法的主體之內(nèi).
2 與委托的具名方法不同,匿名方法可以訪(fǎng)問(wèn)它們外圍作用域的局部變量和環(huán)境,方法中的代碼可以訪(fǎng)問(wèn)外圍變量并且輸出它的值。

二.Lambda表達(dá)式

1.Lambda表達(dá)式簡(jiǎn)介

C#2.0引入了匿名方法,C#3.0引入了Lambda表達(dá)式,匿名方法演變成Lambda表達(dá)式,在使用中我們更希望使用Lambda表達(dá)式來(lái)替代匿名方法。

2.匿名方法轉(zhuǎn)換為L(zhǎng)ambda表達(dá)式的步驟

1 刪除delegate關(guān)鍵字
2 在參數(shù)列表和匿名方法主體之間放lambda運(yùn)算符=>。lambda運(yùn)算符讀作goes to

Mydel del=delegate(int x)  {return x+1;};//匿名方法
Mydel le1=        (int x)=>{return x+1;};//Lambda表達(dá)式

3.簡(jiǎn)化Lambda表達(dá)式

(1) 編譯器可以從委托的聲明中知道委托參數(shù)的類(lèi)型,因此Lambda表達(dá)式允許我們省略類(lèi)型參數(shù)。
帶有類(lèi)型的參數(shù)列表稱(chēng)為顯示類(lèi)型
省略類(lèi)型的參數(shù)列表稱(chēng)為隱式類(lèi)型
(2)如果只有一個(gè)隱式類(lèi)型參數(shù),我們可以省略周?chē)睦ㄌ?hào)。
(3)Lambda表達(dá)式允許表達(dá)式的主體是語(yǔ)句塊或者表達(dá)式。如果語(yǔ)句塊包含了一個(gè)返回語(yǔ)句,我們可以將語(yǔ)句塊替換為return關(guān)鍵字后的表達(dá)式(即去掉關(guān)鍵字return)。

Mydel del=delegate(int x)  {return x+1;};//匿名方法
Mydel le1=        (int x)=>{return x+1;};//Lambda表達(dá)式
Mydel le1=            (x)=>{return x+1;};//省略類(lèi)型的Lambda表達(dá)式
Mydel le1=             x =>{return x+1;};//省略隱式類(lèi)型周?chē)睦ㄌ?hào)的Lambda表達(dá)式
Mydel le1=             x =>        x+1  ;//去掉關(guān)鍵字return的Lambda表達(dá)式

4.Lambda表達(dá)式的注意事項(xiàng)

(1) Lambda表達(dá)式參數(shù)列表中的參數(shù)必須在參數(shù)數(shù)量、類(lèi)型和位置上與委托相匹配;
(2) 表達(dá)式的參數(shù)列表中的參數(shù)不一定需要包含類(lèi)型(隱式類(lèi)型),除非委托有ref或out參數(shù)–此時(shí)必須注明類(lèi)型(顯示類(lèi)型)
(3) 如果只有一個(gè)參數(shù)并且是隱式類(lèi)型的,我們可以省略周?chē)睦ㄌ?hào)。,否則必須有括號(hào)
(4) 如果沒(méi)有參數(shù),必須使用一組空的圓括號(hào)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-616782.html

到了這里,關(guān)于C# 匿名方法和Lambda表達(dá)式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Lambda表達(dá)式和匿名內(nèi)部類(lèi)的區(qū)別

    匿名內(nèi)部類(lèi):可以是接口,也可以是抽象類(lèi),還可以是具體類(lèi) Lambda表達(dá)式:只能是接口 如果接口中有且僅有一個(gè)抽象方法,可以使用Lambda表達(dá)式,也可以使用匿名內(nèi)部類(lèi) 如果接口中多于一個(gè)抽象方法,只能使用匿名內(nèi)部類(lèi),而不能使用Lambda表達(dá)式 匿名內(nèi)部類(lèi):編譯之后,產(chǎn)

    2024年02月10日
    瀏覽(17)
  • 【C++】STL 算法 ② ( foreach 循環(huán)中傳入 函數(shù)對(duì)象 / Lambda 表達(dá)式處理元素 | foreach 循環(huán)算法 | Lambda 表達(dá)式 - 匿名 函數(shù)對(duì)象 / 仿函數(shù) )

    【C++】STL 算法 ② ( foreach 循環(huán)中傳入 函數(shù)對(duì)象 / Lambda 表達(dá)式處理元素 | foreach 循環(huán)算法 | Lambda 表達(dá)式 - 匿名 函數(shù)對(duì)象 / 仿函數(shù) )

    在 C++ 語(yǔ)言中 , std::foreach 循環(huán) 雖然 不是標(biāo)準(zhǔn)庫(kù)的一部分 , 但是 C ++ 編譯器 提供了對(duì) 該語(yǔ)法 的支持作為擴(kuò)展 ; 使用 該 std::foreach 循環(huán) , 可以用于 遍歷 STL 標(biāo)準(zhǔn)模板庫(kù) 中提供的容器 , 如 vector 單端數(shù)組 , list 雙向鏈表 , map 映射 , set 集合 等 容器 中的元素 ; std::for_each 是一個(gè)算

    2024年02月02日
    瀏覽(45)
  • c#中l(wèi)ambda表達(dá)式縮寫(xiě)推演
  • C# LINQ和Lambda表達(dá)式對(duì)照

    Linq語(yǔ)法: Lamda語(yǔ)法: sql語(yǔ)法: Linq語(yǔ)法: Lamda語(yǔ)法: sql語(yǔ)法: Linq語(yǔ)法: Lamda語(yǔ)法: sql語(yǔ)法: ? Linq語(yǔ)法: Lamda語(yǔ)法: sql語(yǔ)法: ? Linq語(yǔ)法: Lamda語(yǔ)法: sql語(yǔ)法: ? Linq語(yǔ)法: Lamda語(yǔ)法: sql語(yǔ)法: Linq語(yǔ)法: Lamda語(yǔ)法: sql語(yǔ)法: ? Linq語(yǔ)法: Lamda語(yǔ)法: EF Core中的寫(xiě)法:

    2024年02月16日
    瀏覽(24)
  • 【C# Programming】委托和lambda表達(dá)式、事件

    【C# Programming】委托和lambda表達(dá)式、事件

    目錄 一、委托和lambda表達(dá)式 1.1 委托概述 1.2?委托類(lèi)型的聲明 1.3?委托的實(shí)例化 1.4?委托的內(nèi)部機(jī)制? 1.5?Lambda 表達(dá)式 1.6?語(yǔ)句lambda 1.7?表達(dá)式lambda 1.8?Lambda表達(dá)式 1.9?通用的委托 1.10?委托沒(méi)有結(jié)構(gòu)相等性 1.11?Lambda表達(dá)式和匿名方法的內(nèi)部機(jī)制 1.12 外部變量 1.13?外部變量的

    2024年02月06日
    瀏覽(28)
  • C#中的Lambda表達(dá)式應(yīng)用方式及場(chǎng)景

    Lambda表達(dá)式在C#中提供了一種更簡(jiǎn)潔、靈活的方式來(lái)定義匿名函數(shù),并在多種場(chǎng)景下提供了更好的代碼編寫(xiě)體驗(yàn)。通過(guò)使用Lambda表達(dá)式,您可以減少冗余代碼,并以更直觀(guān)和簡(jiǎn)潔的方式表達(dá)函數(shù)的邏輯。 當(dāng)使用C#中的Lambda表達(dá)式時(shí),有多種應(yīng)用方式和應(yīng)用場(chǎng)景。?下面我將詳細(xì)

    2024年02月12日
    瀏覽(23)
  • Lambda表達(dá)式與“::“方法引用 & 判空包裝類(lèi)Optional

    函數(shù)式接口(Functional Interface)就是有且僅有一個(gè)抽象方法,但是可以有多個(gè)非抽象方法的接口。 函數(shù)式接口可以被隱式轉(zhuǎn)換為L(zhǎng)ambda表達(dá)式。 方法引用主要是對(duì)Lambda表達(dá)式的一種優(yōu)化! 方法引用的使用前提是對(duì)象和方法都是已經(jīng)存在的! 方法引用提供了一種引用而不執(zhí)行方

    2024年02月06日
    瀏覽(47)
  • 如何使用C#中的Lambda表達(dá)式操作Redis Hash結(jié)構(gòu),簡(jiǎn)化緩存中對(duì)象屬性的讀寫(xiě)操作

    如何使用C#中的Lambda表達(dá)式操作Redis Hash結(jié)構(gòu),簡(jiǎn)化緩存中對(duì)象屬性的讀寫(xiě)操作

    Redis是一個(gè)開(kāi)源的、高性能的、基于內(nèi)存的鍵值數(shù)據(jù)庫(kù),它支持多種數(shù)據(jù)結(jié)構(gòu),如字符串、列表、集合、散列、有序集合等。其中,Redis的散列(Hash)結(jié)構(gòu)是一個(gè)常用的結(jié)構(gòu),今天跟大家分享一個(gè)我的日常操作,如何使用Redis的散列(Hash)結(jié)構(gòu)來(lái)緩存和查詢(xún)對(duì)象的屬性值,以

    2024年02月16日
    瀏覽(26)
  • 【javaSE】 Lambda表達(dá)式與Lambda表達(dá)式的使用

    【javaSE】 Lambda表達(dá)式與Lambda表達(dá)式的使用

    Lambda表達(dá)式是Java SE 8中一個(gè)重要的新特性。lambda表達(dá)式允許你通過(guò)表達(dá)式來(lái)代替功能接口。 lambda表達(dá)式就和方法一樣,它提供了一個(gè)正常的參數(shù)列表和一個(gè)使用這些參數(shù)的主體(body,可以是一個(gè)表達(dá)式或一個(gè)代碼塊)。 Lambda 表達(dá)式(Lambda expression) ,基于數(shù)學(xué)中的λ演算得名,也

    2024年02月08日
    瀏覽(27)
  • JAVA8-lambda表達(dá)式8:在設(shè)計(jì)模式-模板方法中的應(yīng)用

    JAVA8-lambda表達(dá)式1:什么是lambda表達(dá)式 JAVA8-lambda表達(dá)式2:常用的集合類(lèi)api JAVA8-lambda表達(dá)式3:并行流,提升效率的利器? JAVA8-lambda表達(dá)式4:Optional用法 java8-lambda表達(dá)式5:toMap引發(fā)的線(xiàn)上故障 JAVA8-lambda表達(dá)式6:重構(gòu)和定制收集器 JAVA8-lambda表達(dá)式7:重要的函數(shù)接口 最近在公司

    2024年02月14日
    瀏覽(26)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包