.net 解释行动的开始时间<;T>;与Func<;T、 TResult>;代表

.net 解释行动的开始时间<;T>;与Func<;T、 TResult>;代表,.net,delegates,.net,Delegates,为什么.NET 3.0引入了,而.NET 2.0引入了 编辑:我正在.NET 2.0中编写一个项目,我缺少Func。尽管如评论和回答中所述,您可以很容易地推出自己的功能,即简单委托TResult Func(T)我很好奇为什么两个性质如此相似的项目的时间会不同。动作和谓词可能是由于列表上的方法而添加的。直到C#3.5才引入Lambda,像这样的普通代表特别方便 但是正如John提到的,只要创建自己的。这些委托没有什么特别之处。你有什么理由不能创建自己的MyFunc?@John s:我已经创建了自己

为什么.NET 3.0引入了,而.NET 2.0引入了

编辑:我正在.NET 2.0中编写一个项目,我缺少Func。尽管如评论和回答中所述,您可以很容易地推出自己的功能,即简单
委托TResult Func(T)我很好奇为什么两个性质如此相似的项目的时间会不同。

动作
谓词
可能是由于
列表
上的方法而添加的。直到C#3.5才引入Lambda,像这样的普通代表特别方便


但是正如John提到的,只要创建自己的。这些委托没有什么特别之处。

你有什么理由不能创建自己的
MyFunc
?@John s:我已经创建了自己的
MyFunc,但这并没有回答问题。@John Saunders:除了命名它
Func
,这样代码就可以通过排除委托定义无缝地移动到新框架。我最终重命名mine
Func1
Func2
等,以防止在移动到3.x时出现歧义、混淆和命名冲突。程序员将被迫明确理解它不是FCL类版本,然后他们将不得不决定如何处理它。在这一点上,保留它也没有什么错。@jdk将其命名为与框架版本相同的名称,并将其放在一个单独的名称空间中要容易得多。我经常在向Silverlight添加缺少的功能时这样做。例如,Einstein.ComponentModel.INotifyPropertyChanging接口。当移动到3.5时,您将得到一个关于歧义的编译器警告,并且可以删除名称空间导入。