日韩欧美国产精品免费一二-日韩欧美国产精品亚洲二区-日韩欧美国产精品专区-日韩欧美国产另-日韩欧美国产免费看-日韩欧美国产免费看清风阁

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

C# .NET中的Func、Predicate和Expression詳解

admin
2024年11月7日 8:57 本文熱度 1001

在C# .NET中,F(xiàn)unc、Predicate和Expression是三種常用的委托和表達(dá)式類型,它們在編寫靈活、可重用的代碼時(shí)非常有用。本文將詳細(xì)介紹這三種類型,并提供多個(gè)實(shí)例來說明它們的用法和區(qū)別。

1. Func<T, TResult>

Func是一個(gè)通用委托,它可以接受零個(gè)或多個(gè)輸入?yún)?shù),并返回一個(gè)值。其基本形式為:

public delegate TResult Func<out TResult>();public delegate TResult Func<in T, out TResult>(T arg);public delegate TResult Func<in T1, in T2, out TResult>(T1 arg1, T2 arg2);// ... 最多可以有16個(gè)輸入?yún)?shù)

示例1:基本用法

Func<int, int, string> formatNumber = (a, b) => $"The sum of {a} and  is {a + b}";string result = formatNumber(5, 3);Console.WriteLine(result); 

示例2:作為方法參數(shù)

public static List<int> FilterList(List<int> numbers, Func<int, bool> filterFunc){    return numbers.Where(filterFunc).ToList();}
static void Main(string[] args){    // 使用    List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };    List<int> evenNumbers = FilterList(numbers, n => n % 2 == 0);    Console.WriteLine(string.Join(", ", evenNumbers));}

2. Predicate<T>

Predicate是一個(gè)特殊的Func,它始終返回一個(gè)布爾值。它通常用于定義過濾條件。

public delegate bool Predicate<in T>(T obj);

示例3:使用Predicate

static void Main(string[] args){    List<string> fruits = new List<string> { "apple", "banana", "cherry", "date", "elderberry" };
   Predicate<string> startsWithB = s => s.StartsWith("b", StringComparison.OrdinalIgnoreCase);    string bFruit = fruits.Find(startsWithB);
   Console.WriteLine(bFruit);}

示例4:Predicate vs Func

static void Main(string[] args){    // 使用Predicate    Predicate<int> isEven = n => n % 2 == 0;    List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };    List<int> evenNumbers = numbers.FindAll(isEven);
   // 使用Func    Func<int, bool> isOdd = n => n % 2 != 0;    List<int> oddNumbers = numbers.Where(isOdd).ToList();
   Console.WriteLine($"Even numbers: {string.Join(", ", evenNumbers)}");    Console.WriteLine($"Odd numbers: {string.Join(", ", oddNumbers)}");}

3. Expression<T>

Expression表示一個(gè)可以編譯和執(zhí)行的代碼塊。它們通常用于構(gòu)建動(dòng)態(tài)查詢、規(guī)則引擎或者在運(yùn)行時(shí)修改代碼行為。

示例5:基本Expression

static void Main(string[] args){    Expression<Func<int, bool>> isPositive = n => n > 0;
   // 編譯并執(zhí)行Expression    Func<int, bool> compiledFunc = isPositive.Compile();    bool result = compiledFunc(5);    Console.WriteLine(result);}

示例6:構(gòu)建動(dòng)態(tài)查詢

public class Person{    public string Name { get; set; }    public int Age { get; set; }}
public static Expression<Func<Person, bool>> BuildAgeRangeExpression(int minAge, int maxAge){    ParameterExpression parameter = Expression.Parameter(typeof(Person), "p");    Expression left = Expression.Property(parameter, "Age");    Expression minAgeCheck = Expression.GreaterThanOrEqual(left, Expression.Constant(minAge));    Expression maxAgeCheck = Expression.LessThanOrEqual(left, Expression.Constant(maxAge));    Expression combinedCheck = Expression.AndAlso(minAgeCheck, maxAgeCheck);
   return Expression.Lambda<Func<Person, bool>>(combinedCheck, parameter);}
static void Main(string[] args){    // 使用    List<Person> people = new List<Person>    {        new Person { Name = "Alice", Age = 25 },        new Person { Name = "Bob", Age = 30 },        new Person { Name = "Charlie", Age = 35 },        new Person { Name = "David", Age = 40 }    };
   var ageRangeExpression = BuildAgeRangeExpression(28, 38);    var filteredPeople = people.AsQueryable().Where(ageRangeExpression);
   foreach (var person in filteredPeople)    {        Console.WriteLine($"{person.Name} - {person.Age}");    }}

總結(jié)

  1. Func<T, TResult> 是一個(gè)通用委托,可以接受多個(gè)輸入?yún)?shù)并返回一個(gè)值。它非常靈活,適用于多種場景。

  2. Predicate<T> 是Func的一個(gè)特例,專門用于返回布爾值的情況。它通常用于定義過濾條件。

  3. Expression<T> 表示可編譯和執(zhí)行的代碼塊。它允許在運(yùn)行時(shí)檢查、修改和編譯代碼,特別適用于構(gòu)建動(dòng)態(tài)查詢和規(guī)則引擎。


這三種類型在C# .NET編程中扮演著重要角色,能夠幫助開發(fā)者編寫更加靈活、可重用和高效的代碼。根據(jù)具體的使用場景,選擇合適的類型可以大大提高代碼的表現(xiàn)力和可維護(hù)性。


該文章在 2024/11/7 10:27:20 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運(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)簽打印,條形碼,二維碼管理,批號管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 日韩精品三级 | 久夜色精品国产一区二区三区 | 亚洲欧美色一区二区三区精品 | 曰批视频免费观看完 | 极品白丝袜app网站 亚洲综合精品网站在线观看 | 欧美精品一区二区三区四区 | 天堂va视频一区二区 | 一区二区三区日韩免费 | 国产自偷酒店在线观看 | 私人小影院 | 国产一区二区三区视频精品 | 4k超清国| 日本不卡在线观看 | 日本aⅴ中文免费观看 | 国产一产二产三精华液 | 国产视频一区在线观看 | 99精品全国免费观看视频 | 亚洲aⅴ乱码一区 | 成人69激情视频在线观看 | 99国产视频 | 精品一区二区三区免费视频 | 欧美亚洲制服 | 国产精品一区韩国电影日本 | 欧美一区二区三区视频在线 | 久热爱精品视频在 | 国产欧美va欧美va日韩精品 | 日韩欧美伦理 | 私人影视网 | 久插视频 | 在线成人亚洲一区电影 | 欧美日韩国产在线人成 | 不卡中文字幕激情视频网站 | 亚洲精品∧v在线观看 | 欧美日韩亚洲视频精品 | 中文字幕乱码亚洲精品 | 国产一区二区xxx | 2025国产精品视频免费 | 影视大全官网 | 91成人影院在线观看 | 欧美日日日| a大片高清在线观看 |