再谈.NET委托(delegate、Func<>)
为了演示委托,我们先来定义一个方法:
public static bool IsTen(int i)
{
return i == 10 ? true : false;
}
如果要用自定义委托,则需要声明:
delegate bool IsTenDelegate(int i);
示例一:
//这是最基本的写法
IsTenDelegate d = new IsTenDelegate(IsTen);
Console.WriteLine(d(10)); //true
示例二:
//自定义匿名委托
IsTenDelegate d = delegate(int i) { return i == 10 ? true : false; };
Console.WriteLine(d(10)); //true
示例三:
//或者使用系统现有的委托Func<>,结合lambda表达式
Func<int, bool> d = p => p == 10 ? true : false;
Console.WriteLine(d(10)); //true
示例四:
//或者也可以这么写
Func<int, bool> d = delegate(int i) { return i == 10 ? true : false; };
Console.WriteLine(d(10)); //true
-------------- 高端大气上档次的分割线 --------------------
下面我们来看一个Func<>委托的实际应用场景:
//假设有一个Model
public class TModel
{
public int ID { get; set; }
public string Name { get; set; }
public List<string> Friends { get; set; }
}
//提供一个处理单个Model数据的方法模板,返回方法集合
public static List<Func<TModel, object, object>> DataConver()
{
List<Func<TModel, object, object>> list = new List<Func<TModel, object, object>>();
list.Add((t, p) => t.ID = (int)p);
list.Add((t, p) => t.Name = p.ToString());
return list;
}
//利用方法集合处理数据,并返回结果数据
//此方法为一个泛型方法,接受类型参数T
public static List<T> GetData<T>(List<Func<T, object, object>> dataMaker) where T:class,new()
{
List<T> lst = new List<T>();
T t = new T();
for (int i = 0; i < dataMaker.Count; i++)
{
//因为dataMaker是方法集合,而每个方法都负责处理T中的一个成员,
//这里假设所有方法的第二个参数都是123,
//具体应用场景应该是根据T对应的成员类型做不同的转换。
dataMaker[i](t, 123);
}
lst.Add(t);
return lst;
}
//调用
List<TModel> list = GetData<TModel>(DataConver());
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端