【问题标题】:void Func without arguments没有参数的 void Func
【发布时间】:2012-03-03 22:30:52
【问题描述】:

有一些类似的问题,但与我的不完全一样。

对于不带返回值(即 void)且不带参数的函数,是否存在等效的 Func?

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

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

【问题讨论】:

  • @Anthony Pegram:但我需要在 Action 中填写 类型,并且不可能出现 void(我将编辑我的问题,我犯了一个错误)。

标签: c# wpf mvvm func


【解决方案1】:

您的措辞令人困惑。您的意思可能是“一个没有返回类型且没有参数的函数”。简直就是System.Action

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

来自您的评论:

但我需要在 Action 中填写 <T> 类型,并且不可能出现 void(我将编辑我的问题,我犯了一个错误)。

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

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

【讨论】:

  • 是的,我完全错过了 是可选的。感谢您(和其他人)的帮助。
  • @anthony 如何使用 .NET Framework 3.5 之前的版本执行此操作。没有委托操作。仅委托 Action.
  • @ph1983,在 C# 3 之前,您将使用委托,尽管 C# 2.0 添加了对匿名方法的支持。我没有直接的示例问题,但您可以在 MSDN 上阅读有关该功能的信息。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    较新的框架版本添加了带有更多参数的重载。 最大参数数:

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

    动作总是有一个void 返回类型。 void 返回类型不需要也不能指定为泛型类型参数。相比之下,Func 委托定义了“真正的”返回类型,并且始终具有至少一个用于返回类型的泛型类型参数。参考here

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-07
      • 1970-01-01
      • 2012-03-21
      相关资源
      最近更新 更多