void Func不带参数

时间:2012-02-11 23:29:35

标签: c# wpf mvvm func

有一些类似的问题但不完全像我的。

对于没有返回值(即无效)且没有参数的函数,是否存在Func等价物?

相关问题是Func not returning anything? 但这并不能解决无效类型。

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

3 个答案:

答案 0 :(得分:46)

你的措辞令人困惑。您可能意味着“没有返回类型且没有参数的函数”。只有System.Action

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

来自你的评论:

  

但是我需要在动作中填写<T>类型并且无法实现无效(我将编辑我的问题,我犯了一个错误)。

这表明存在误解。 Action委托中的T是输入。 void是输出。 Action委托本质上是一个返回void的委托。 T是它可以作用的输入的类型,然后是参数提供的参数。

无论如何,正如这个答案和其他人所表明的那样,你可以拥有一个没有任何T的Action委托,一个不需要输入的委托。

答案 1 :(得分:16)

是的,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)
...

第一行是您正在寻找的。

较新的Framework版本添加了更多参数的重载。 最大参数数量:

  • .NET Framework 2.0: 1
  • .NET Framework 3.5: 4
  • .NET Framework 4.0: 16
  • Silverlight: 16

操作始终为void返回类型。 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)

答案 2 :(得分:4)

您正在寻找的是行动。它不需要参数,也不返回任何值。