【发布时间】:2010-11-12 04:39:49
【问题描述】:
Action<T> 委托返回 void。是否有任何其他返回非 void 值的内置委托?
【问题讨论】:
Action<T> 委托返回 void。是否有任何其他返回非 void 值的内置委托?
【问题讨论】:
是的。 Func<> 返回指定为最终泛型类型参数的类型,这样Func<int> 返回一个int,Func<int, string> 接受一个整数并返回一个字符串。例子:
Func<int> getOne = () => 1;
Func<int, string> convertIntToString = i => i.ToString();
Action<string> printToScreen = s => Console.WriteLine(s);
// use them
printToScreen(convertIntToString(getOne()));
【讨论】:
当然,Func Delegates 返回 T。
Func<TResult> is "TResult method()"
Func<TInput, TResult> is "TResult method(TInput param)"
一直到
Func<T1, T2, T3, T4, TResult>
http://msdn.microsoft.com/en-us/library/bb534960.aspx
http://msdn.microsoft.com/en-us/library/bb534303.aspx
另外,为了完整起见,还有返回 bool 的 Predicate。
Predicate<T> is "bool method(T param)"
【讨论】:
Func<> 可以是 Func<T1,... T16, TResult>,之前的限制是 T4。
Converter(TInput, TOutput) 和Comparison(T)(显然早于Func<T1, T2> 和Func<T1, T2, T3>,这使得它们已经过时)。实际上,可能不止这些……
predicate 的 Func<T, bool> 参数,但我总是觉得有点奇怪。在相关的说明中,我曾经(在我的黑暗时期)实际上开始编写一个 ConvertAll<TIn, TOut> 函数,该函数采用 IEnumerable<TIn> 并在 Converter<TIn, TOut> 的帮助下吐出 IEnumerable<TOut>...直到我(很快) 意识到这正是Select 已经在做的事情。被相同的代表挫败!