void Func不带参数

Mic*_*ers 31 c# wpf func mvvm

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

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

相关的问题是Func没有返回任何东西? 但这并不适用于无效类型.

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

Ant*_*ram 50

你的措辞令人困惑.你可能意思是"没有返回类型且没有参数的函数".只有System.Action.

Action action = () => Console.WriteLine("hello world");
action();
Run Code Online (Sandbox Code Playgroud)

来自你的评论:

但是我需要填写<T>一个动作中的类型并且空白不可能(我将编辑我的问题,我犯了一个错误).

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

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

  • 是的,我完全错过<T>是可选的.谢谢(和其他人)的帮助. (4认同)

Oli*_*bes 18

是的,有不同的重载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)
...
Run Code Online (Sandbox Code Playgroud)

第一行是您正在寻找的.

较新的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)
...
Run Code Online (Sandbox Code Playgroud)

.NET Framework 4.0中增加了inout修饰的泛型类型参数逆变和协方差.请参阅:泛型中的协方差和逆变.例子:

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)
Run Code Online (Sandbox Code Playgroud)


Rya*_*anR 5

您正在寻找的是一个操作。它不带任何参数,也不返回任何值。