最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# Lambda表達(dá)式select()和where()的區(qū)別及用法

 更新時(shí)間:2023年07月25日 09:21:25   作者:KissingTheFire  
這篇文章主要介紹了C# Lambda表達(dá)式select()和where()的區(qū)別及用法,select在linq中一般會(huì)用來(lái)提取最后篩選的元素集合,在lambda表達(dá)式中通常用where得到元素集合,需要的朋友可以參考下

C# Lambda表達(dá)式select()和where()的區(qū)別

1、where()用法:必須加條件,且返回對(duì)象結(jié)果。

string[] arrays={"asd","abc","bbb","ccc"};
var results = arrays.Where(a=>a.Contains("b"));//必須加條件,返回對(duì)象

2、select()用法:(1)(a=>a.Value=="22")加條件查詢時(shí),返回bool型結(jié)果;(2)(a=>a)沒(méi)條件返回對(duì)象

string[] arrays={"asd","abc","bbb","ccc"};
var results = arrays.Select(a => a.Contains("b"));//1、(a=>a.Value=="22")加條件查詢時(shí),返回bool型結(jié)果
string[] arrays={"asd","abc","bbb","ccc"};
var results = arrays.Select(a => a);//1、(a=>a)沒(méi)條件,返回所有對(duì)象;

結(jié)論:

select在linq中一般會(huì)用來(lái)提取最后篩選的元素集合,在lambda表達(dá)式中通常用where得到元素集合

C# Lambda表達(dá)式

前言

在日常使用C#編程的過(guò)程中,會(huì)經(jīng)常使用到lambda表達(dá)式,本文將會(huì)詳細(xì)講解Lambda表達(dá)式。

1 認(rèn)識(shí)Lambda表達(dá)式

  • Lambda表達(dá)式本質(zhì)上就是匿名函數(shù)
  • 使用lambda聲明運(yùn)算符 =>(讀作goesto)的表達(dá)式就是Lambda表達(dá)式
  • 創(chuàng)建Lambda表達(dá)式,需要在 Lambda 運(yùn)算符左側(cè)指定輸入?yún)?shù)(如果有),然后在另一側(cè)輸入表達(dá)式或語(yǔ)句塊。即是說(shuō)我們使用形如 ()=> { } 這樣的格式就可以創(chuàng)建Lambda表達(dá)式
  • 任何 Lambda 表達(dá)式都可以轉(zhuǎn)換為委托類型。 Lambda 表達(dá)式可以轉(zhuǎn)換的委托類型由其參數(shù)和返回值的類型定義。 如果 Lambda 表達(dá)式不返回值,則可以將其轉(zhuǎn)換為 Action 委托類型之一;否則,可將其轉(zhuǎn)換為 Func 委托類型之一。

正因?yàn)槿魏?Lambda表達(dá)式都可以轉(zhuǎn)換為委托類型,那么在需要使用委托的地方都可以結(jié)合Lambda使用,極大的方便了委托的使用和提高代碼的簡(jiǎn)潔度。

  • Lambda表示式的兩種方式

表達(dá)式lambda,表達(dá)式為主體【側(cè)重表達(dá)式的返回值】

(input-parameters) => expression
//如:
 x => x * 4

語(yǔ)句 lambda,語(yǔ)句塊作為其主體:【側(cè)重語(yǔ)句塊中執(zhí)行內(nèi)容】

(input-parameters) => { <sequence-of-statements> }
//如:
(int x) => { return x * 2; };

表達(dá)式位于=>運(yùn)算符右側(cè)的lambda表達(dá)式稱之為“表達(dá)式Lambda”。
表達(dá)式Lambda會(huì)返回表達(dá)式的結(jié)果
表達(dá)式Lambda的主體可以包含方法的調(diào)用

表達(dá)式Lambda案例如下:

    public class LambdaTest
    {
        public void Test()
        {
            //表達(dá)式lambda 只有一個(gè)表達(dá)式,表示這里面只允許有一行代碼
            Func<int, int> func = x => x * 4;
            //接收表達(dá)式Lambda返回的值
            int result1 = func(5);
            //在表達(dá)式lambda中調(diào)用方法
            func = x => x * Add(3, 2);
            int result2 = func(5);
        }
        public int Add(int x,int y)
        {
            return x + y;
        }
    }

上述代碼中, x=>x * 4 等同于,本質(zhì)上還是一個(gè)將一個(gè)有返回值的方法賦予了Func委托此處還有一個(gè)需要注意的地方就是,Lambda表示式省略了方法中的return 關(guān)鍵字,直接將表達(dá)式中計(jì)算的結(jié)果返回

        public int FourX(int number)
        {
            return number * 4;
        }

語(yǔ)句Lambda和表達(dá)式Lambda類似,也是位于=>運(yùn)算符右側(cè),只是語(yǔ)句在大括號(hào)中。語(yǔ)句Lambda的主體可以包括任意數(shù)量的語(yǔ)句,但是通常上不會(huì)多于2個(gè)或3個(gè)。不能使用語(yǔ)句Lambda創(chuàng)建表達(dá)式樹(shù)

            Action<int> action = (x) => {  Console.WriteLine(x); };
            action = (y) =>
            {
                y *= 4;
                Console.WriteLine(y);
            };

2 Lambda表達(dá)式的輸入?yún)?shù)

1)將 lambda 表達(dá)式的輸入?yún)?shù)括在括號(hào)中。 使用空括號(hào)指定零個(gè)輸入?yún)?shù)

如果是沒(méi)有參數(shù),必須有這個(gè)空括號(hào)

Action line = () => Console.WriteLine();

2)如果 lambda 表達(dá)式只有一個(gè)輸入?yún)?shù),則括號(hào)是可選的:

如果只有一個(gè)輸入?yún)?shù),則括號(hào)可有可無(wú)

Func<double, double> cube = x => x * x * x;

3)兩個(gè)或更多輸入?yún)?shù)使用逗號(hào)加以分隔:

Func<int, int, bool> testForEquality = (x, y) => x == y;

4)有時(shí),編譯器無(wú)法推斷輸入?yún)?shù)的類型。 可以顯式指定類型,如下面的示例所示:

一般情況下,編譯器可自行推斷輸入?yún)?shù)的類型,但存在編譯器無(wú)法推斷的情況,則需自行指定。

Func<int, string, bool> isTooLong = (int x, string s) => s.Length > x;

3 從Lambda表達(dá)式的發(fā)展理解其使用

    public delegate void ShowDelegate(int a,string b);
    public class LambdaEvolution
    {
        public void Show(int a1,string b1)
        {
            Console.WriteLine($"show{a1}:{b1}");
        }
        public void Test()
        {
            //1 .Netframework1.0/1.1,原始方法
            ShowDelegate showDelegate = new ShowDelegate(Show);
            //2 .NetFramework2.0,匿名方法,增加delegate,去掉單獨(dú)定義方法
            showDelegate = delegate (int x,string y) { Console.WriteLine($"show{x}:{y}"); };
            //3 .NetFramework3.0,=> 引入Lambda表達(dá)式,去掉delegate
            showDelegate = (int s,string t) => { Console.WriteLine($"show{s}:{t}"); };
            //4 .NetFramework3.0后期,簡(jiǎn)化參數(shù)類型,編譯器自動(dòng)推斷數(shù)據(jù)類型
            showDelegate = (s,t) => { Console.WriteLine($"show{s}:{t}"); };
            //5 如果方法體中只有一行代碼,可以省略方法體大括號(hào)
            showDelegate = (s,t) => Console.WriteLine($"show{s}:{t}");
            //如果方法只有一個(gè)參數(shù),可以省略參數(shù)小括號(hào)
            Action<string> action = x => Console.WriteLine($"show{x}");
            //如果方法體中只有一行代碼,且有返回值,可以省略return
            Func<int, string> func = x => x.ToString();
        }
    }

總結(jié)

以上就是今天要講的內(nèi)容,本文僅僅簡(jiǎn)單介紹了Lambda的基本使用,而Lambda還有和表達(dá)式樹(shù),LINQ,異步Lambda等知識(shí),會(huì)在后續(xù)進(jìn)行完善

參考資料:

官方文檔,C#高級(jí)–LambdaLinq詳解

到此這篇關(guān)于C# Lambda表達(dá)式select()和where()的區(qū)別及用法的文章就介紹到這了,更多相關(guān)C# Lambda表達(dá)式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#圖片添加水印的實(shí)現(xiàn)代碼

    C#圖片添加水印的實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了C#給圖片添加水印的實(shí)現(xiàn)代碼,不僅可以為圖片加文字水印,還可以判斷是否是圖片文件,感興趣的小伙伴們可以參考一下
    2016-02-02
  • C#中BitmapImage與BitmapSource接口的區(qū)別對(duì)比小結(jié)

    C#中BitmapImage與BitmapSource接口的區(qū)別對(duì)比小結(jié)

    BitmapImage和BitmapSource都可以用于表示和顯示圖像,本文就來(lái)介紹一下C#中BitmapImage與BitmapSource接口的區(qū)別對(duì)比,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • C#數(shù)組應(yīng)用分析

    C#數(shù)組應(yīng)用分析

    C#數(shù)組應(yīng)用分析...
    2007-08-08
  • 深入c# GDI+簡(jiǎn)單繪圖的具體操作步驟(二)

    深入c# GDI+簡(jiǎn)單繪圖的具體操作步驟(二)

    本篇文章是對(duì)GDI+簡(jiǎn)單繪圖的繪圖知識(shí)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 深度剖析C#中Stateless 狀態(tài)機(jī)

    深度剖析C#中Stateless 狀態(tài)機(jī)

    Stateless狀態(tài)機(jī)庫(kù)提供了一種優(yōu)雅且強(qiáng)大的方式來(lái)管理復(fù)雜的狀態(tài)邏輯,通過(guò)聲明式的方式定義狀態(tài)、觸發(fā)事件和狀態(tài)轉(zhuǎn)換規(guī)則,本文主要介紹了C#中Stateless 狀態(tài)機(jī),感興趣的可以了解一下
    2026-01-01
  • C#如何Task執(zhí)行任務(wù),等待任務(wù)完成

    C#如何Task執(zhí)行任務(wù),等待任務(wù)完成

    這篇文章主要介紹了C#如何Task執(zhí)行任務(wù),等待任務(wù)完成,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 聚星C#數(shù)字信號(hào)處理工具包頻譜分析的用法

    聚星C#數(shù)字信號(hào)處理工具包頻譜分析的用法

    這篇文章主要介紹了聚星C#數(shù)字信號(hào)處理工具包頻譜分析的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • unity使用socket編程實(shí)現(xiàn)聊天室功能

    unity使用socket編程實(shí)現(xiàn)聊天室功能

    這篇文章主要為大家詳細(xì)介紹了unity使用socket編程實(shí)現(xiàn)聊天室功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C#反射調(diào)用拓展類方法實(shí)例代碼

    C#反射調(diào)用拓展類方法實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于C#反射調(diào)用拓展類方法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-01-01
  • C#Button窗體常用屬性及事件詳解

    C#Button窗體常用屬性及事件詳解

    在本篇文章里小編給各位分享的是關(guān)于C#Button窗體常用屬性及事件詳解,需要的朋友們可以參考下。
    2020-03-03

最新評(píng)論

巴里| 湘乡市| 绍兴县| 龙口市| 新河县| 靖西县| 瑞丽市| 晋州市| 新化县| 保亭| 双鸭山市| 康平县| 定安县| 关岭| 嘉荫县| 浙江省| 宜春市| 上饶市| 惠州市| 石河子市| 蓬莱市| 含山县| 沁源县| 北京市| 湾仔区| 二手房| 舒兰市| 镇原县| 鞍山市| 高陵县| 上蔡县| 修武县| 武穴市| 双牌县| 涪陵区| 友谊县| 西宁市| 罗田县| 家居| 西峡县| 吕梁市|