【问题标题】:How do I describe an Action<T> delegate that returns a value (non-void)?如何描述返回值(非 void)的 Action<T> 委托?
【发布时间】:2010-11-12 04:39:49
【问题描述】:

Action&lt;T&gt; 委托返回 void。是否有任何其他返回非 void 值的内置委托?

【问题讨论】:

    标签: c# .net delegates


    【解决方案1】:

    是的。 Func&lt;&gt; 返回指定为最终泛型类型参数的类型,这样Func&lt;int&gt; 返回一个intFunc&lt;int, string&gt; 接受一个整数并返回一个字符串。例子:

    Func<int> getOne = () => 1;
    Func<int, string> convertIntToString = i => i.ToString();
    Action<string> printToScreen = s => Console.WriteLine(s);
    // use them
    
    printToScreen(convertIntToString(getOne()));
    

    【讨论】:

      【解决方案2】:

      当然,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)"
      

      http://msdn.microsoft.com/en-us/library/bfcke1bz.aspx

      【讨论】:

      • 另外,在 .NET 4 中,Func&lt;&gt; 可以是 Func&lt;T1,... T16, TResult&gt;,之前的限制是 T4。
      • 另外,为了 complete 完整性,不要忘记Converter(TInput, TOutput)Comparison(T)(显然早于Func&lt;T1, T2&gt;Func&lt;T1, T2, T3&gt;,这使得它们已经过时)。实际上,可能不止这些……
      • @Dan 非常正确,尽管它们的命名非常具体(这就是它的全部内容)。我用过一次转换器:stum.de/2009/12/23/…
      • 是的,尽管很多 LINQ 扩展方法都采用名为 predicateFunc&lt;T, bool&gt; 参数,但我总是觉得有点奇怪。在相关的说明中,我曾经(在我的黑暗时期)实际上开始编写一个 ConvertAll&lt;TIn, TOut&gt; 函数,该函数采用 IEnumerable&lt;TIn&gt; 并在 Converter&lt;TIn, TOut&gt; 的帮助下吐出 IEnumerable&lt;TOut&gt;...直到我(很快) 意识到这正是Select 已经在做的事情。被相同的代表挫败!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      • 2012-09-09
      • 1970-01-01
      • 1970-01-01
      • 2021-07-17
      • 2017-07-02
      • 1970-01-01
      相关资源
      最近更新 更多