有一些类似的问题但不完全像我的。
对于没有返回值(即无效)且没有参数的函数,是否存在Func等价物?
相关问题是Func not returning anything? 但这并不能解决无效类型。
(我需要它来从我的视图模型请求操作到我的视图)。
答案 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)
...
第一行是您正在寻找的。 p>
较新的Framework版本添加了更多参数的重载。 最大参数数量:
操作始终为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已将in
和out
修饰符添加到用于逆变和协方差的泛型类型参数中。见: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)
您正在寻找的是行动。它不需要参数,也不返回任何值。