2012-02-11 89 views
24

有一些类似的问题,但不完全像我的。void Func无参数

是否有没有返回值(即void)和没有参数的函数的Func等价物?

相关问题是Func not returning anything? 但这不适用于void类型。

(我需要它从我的视图模型请求动作到我的视图)。

+0

@Anthony Pegram:但我需要填写型的动作和无效的可能性也不大(我将编辑我的问题,我犯了一个错误)。 – 2012-02-11 23:38:17

回答

37

你的措辞令人困惑。您可能是指“没有返回类型且没有参数的功能。”有简单的System.Action

Action action =() => Console.WriteLine("hello world"); 
action(); 

从您的评论:

但我需要填写在行动和无效的一个<T>类型的可能性也不大(我将编辑我的问题,我犯了一个错误)。

这表示一种误解。行动代表中的T是输入。该空白是输出。一个Action委托本质上是一个返回void的委托。 T是输入的类型它可以处理参数,然后您将提供参数。

无论如何,正如此答案和其他人所显示的那样,您可以拥有一个没有任何T的Action委托,一个不接受任何输入的委托。

+3

是的,我完全错过了是可选的。谢谢(和其他人)的帮助。 – 2012-02-11 23:42:52

+0

@anthony如何在3.5之前的.NET Framework中执行此操作。没有委托行动。只有代表行动。 – 2014-08-26 09:07:59

+0

@ ph1983,在C#3之前,您可以使用委托,尽管C#2.0添加了对*匿名方法*的支持。我没有正确的示例问题,但是您可以阅读[MSDN]上的功能(http://msdn.microsoft.com/zh-cn/library/0yw3tz5k.aspx)。 – 2014-08-26 16:06:02

3

你在找什么是一个行动。它不带参数,并且不返回任何值。

13

是的,有不同的过载Action采取不同数量的输入参数和void返回类型。

Action    public delegate void Action() 
Action<T>    public delegate void Action<T>(T obj) 
Action<T1,T2>   public delegate void Action<T1,T2>(T1 arg1, T2 arg2) 
Action<T1,T2,T3>  public delegate void Action<T1,T2,T3>(T1 arg1, T2 arg2, T3 arg3) 
... 

第一行是你要找的。

较新的框架版本增加了重载甚至更多的参数。 的参数的最大数量:

  • 的.NET Framework 2.0:   
  • 的.NET Framework 3.5:   
  • .NET框架4。0:
  • 的Silverlight:                                   

操作始终一个void返回类型。 A void返回类型不需要,也不能指定为泛型类型参数。相比之下,Func代表界定“真正”的返回类型,并一直为返回类型的至少一个泛型类型参数:

Func<TResult>   public delegate TResult Func<TResult>() 
Func<T,TResult>   public delegate TResult Func<T,TResult>(T arg) 
Func<T1,T2,TResult>  public delegate TResult Func<T1,T2,TResult>(T1 arg1, T2 arg2) 
... 

的.NET Framework 4.0增加了inout修饰的泛型类型反变量和协方差的参数。请参阅:Covariance and Contravariance in Generics。例子:

public delegate void Action<in T1, in T2>(T1 arg1, T2 arg2) 

public delegate TResult Func<in T1, in T2, out TResult>(T1 arg1, T2 arg2)