Func <T,TResult>委托现实世界使用

Max*_*ich 6 c# lambda anonymous-function func

我最近一直在玩代理Func<T, TResult>并创建返回Func<T, TResult>包含lambda的不同实例的方法,但我一直在努力想出的是为什么人们想要返回(甚至创建这样的实例)的任何好的现实世界观点.

MSDN上有一个例子,它们执行以下操作......

Func<string, string> convertMethod = UppercaseString;
private static string UppercaseString(string inputString)
{
    return inputString.ToUpper();
}
Run Code Online (Sandbox Code Playgroud)

虽然它看起来很漂亮并且是一个有趣的概念,但我没有看到这些代码提供的优势.

那么有人可以提供他们必须使用的任何现实世界的例子,Func<T, TResult>并且一般为什么人们可能想要使用这个代表?

Ada*_*son 11

如果你要问的是,为什么我们一般会有代表:

  • 如果您曾经消费过一个活动,那么您已经使用了一个代表
  • 如果您曾经使用过LINQ,那么您已经使用了委托(从技术上讲,使用了IQueryable一个表达式的提供程序,但是对于LINQ到对象,您使用了委托)

代理提供了一种将自己的行为注入另一个对象的方法.最常见的用法是事件.对象公开事件并提供在该事件触发时调用的函数(匿名或非匿名).

如果你问为什么我们有Func<T, TResult>(和类似的)代表,那么有两个主要原因:

  1. 人们在代码中需要特定的委托时,必须声明自己的简单委托类型.虽然代表Action<>Func<>代表不能涵盖所有案例,但它们很容易提供,并涵盖需要定制代表的许多情况.
  2. 更重要的是,Func<T, TResult>委托在LINQ-to-Objects中广泛使用来定义谓词.更具体地说,Func<T, bool>.这允许您定义一个带有强类型成员的谓词,并IEnumerable<T>使用lambda或普通函数返回一个布尔值,然后将该谓词传递给LINQ-to-Objects.