亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2023年07月25日 09:21:25   作者:KissingTheFire  
這篇文章主要介紹了C# Lambda表達(dá)式select()和where()的區(qū)別及用法,select在linq中一般會(huì)用來提取最后篩選的元素集合,在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)沒條件返回對(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)沒條件,返回所有對(duì)象;

結(jié)論:

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

C# Lambda表達(dá)式

前言

在日常使用C#編程的過程中,會(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á)式或語句塊。即是說我們使用形如 ()=> { } 這樣的格式就可以創(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

語句 lambda,語句塊作為其主體:【側(cè)重語句塊中執(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;
        }

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

            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ù)

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

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

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

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

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í),編譯器無法推斷輸入?yún)?shù)的類型。 可以顯式指定類型,如下面的示例所示:

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

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á)式樹,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#統(tǒng)計(jì)字符串的方法

    C#統(tǒng)計(jì)字符串的方法

    這篇文章主要為大家詳細(xì)介紹了C#統(tǒng)計(jì)字符串的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • 詳解C#如何將枚舉以下拉數(shù)據(jù)源的形式返回給前端

    詳解C#如何將枚舉以下拉數(shù)據(jù)源的形式返回給前端

    這篇文章主要為大家詳細(xì)介紹了C#如何實(shí)現(xiàn)將枚舉以下拉數(shù)據(jù)源的形式返回給前端,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2023-06-06
  • 基于C#實(shí)現(xiàn)12306的動(dòng)態(tài)驗(yàn)證碼變成靜態(tài)驗(yàn)證碼的方法

    基于C#實(shí)現(xiàn)12306的動(dòng)態(tài)驗(yàn)證碼變成靜態(tài)驗(yàn)證碼的方法

    這篇文章主要介紹了基于C#實(shí)現(xiàn)12306的動(dòng)態(tài)驗(yàn)證碼變成靜態(tài)驗(yàn)證碼的方法的相關(guān)資料,需要的朋友可以參考下
    2015-12-12
  • C#中的Hangfire和Quartz.NET 任務(wù)調(diào)度的區(qū)別解析

    C#中的Hangfire和Quartz.NET 任務(wù)調(diào)度的區(qū)別解析

    Hangfire 和 Quartz.NET 是兩種常見的 C# 任務(wù)調(diào)度庫,它們有不同的特點(diǎn)和使用場(chǎng)景,本文給大家介紹C#中的Hangfire和Quartz.NET 任務(wù)調(diào)度的區(qū)別,感興趣的朋友一起看看吧
    2024-08-08
  • C#實(shí)現(xiàn)的JS操作類實(shí)例

    C#實(shí)現(xiàn)的JS操作類實(shí)例

    這篇文章主要介紹了C#實(shí)現(xiàn)的JS操作類,封裝了C#關(guān)于javascript的彈出對(duì)話框、返回上一頁、跳轉(zhuǎn)等常用操作,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-03-03
  • C# 組件的使用方法示例詳解

    C# 組件的使用方法示例詳解

    這篇文章主要介紹了C# 組件的使用方法示例詳解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2025-04-04
  • c#中單例類與靜態(tài)類的區(qū)別以及使用場(chǎng)景

    c#中單例類與靜態(tài)類的區(qū)別以及使用場(chǎng)景

    這篇文章主要給大家介紹了關(guān)于c#中單例類與靜態(tài)類的區(qū)別以及使用場(chǎng)景的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • C#判斷多個(gè)文本框是否為空的方法

    C#判斷多個(gè)文本框是否為空的方法

    這篇文章主要介紹了C#判斷多個(gè)文本框是否為空的方法,可實(shí)現(xiàn)對(duì)多個(gè)文本框的遍歷、判斷及提示等功能,需要的朋友可以參考下
    2015-06-06
  • C#實(shí)現(xiàn)簡(jiǎn)單的天氣預(yù)報(bào)示例代碼

    C#實(shí)現(xiàn)簡(jiǎn)單的天氣預(yù)報(bào)示例代碼

    這篇文章主要介紹了C#實(shí)現(xiàn)簡(jiǎn)單的天氣預(yù)報(bào)示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • C#線程池ThreadPool用法簡(jiǎn)介

    C#線程池ThreadPool用法簡(jiǎn)介

    這篇文章介紹了C#線程池ThreadPool的用法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06

最新評(píng)論