不带参数的 void 函数

发布于 2025-01-05 05:34:21 字数 235 浏览 1 评论 0原文

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

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

相关问题是 Func 不返回任何内容? 但这并不能回答 void 类型。

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

There are some similar questions but not exactly like mine.

Is there a Func equivalent for a function without a return value (i.e. void) and without parameters?

The related question is Func not returning anything?
but this does not answer for a void type.

(I need it to request actions from my view model to my view).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

多情癖 2025-01-12 05:34:21

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

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

从你的评论来看:

但是我需要在操作中填写 类型,而 void 是不可能的(我将编辑我的问题,我犯了一个错误)。

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

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

Your wording is confusing. You perhaps mean "a function without a return type and no parameters." There is simply System.Action.

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

From your comment:

But I need to fill in a <T> type in an Action and void is not a possibility (I will edit my question, I made a mistake).

This indicates a misunderstanding. The T in the Action delegate is an input. The void is the output. An Action delegate is inherently a delegate returning void. The T is the type of input it can act upon, the parameters you would then supply with arguments.

At any rate, as this answer and others show, you can have an Action delegate without any T, a delegate that takes no inputs.

∝单色的世界 2025-01-12 05:34:21

是的,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:   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 修饰符,以实现逆变和协变。请参阅:泛型中的协变和逆变。示例:

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)

Yes, there are different overloads of Action taking a different number of input parameters and having a void return type.

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)
...

The first line is what you are looking for.

Newer Framework versions have added overloads with even more arguments.
Maximum number of arguments:

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

Actions have always a void return type. A void return type need not and cannot be specified as generic type parameter. By contrast, the Func delegates define "real" return types and have always at least one generic type parameter for the return type. Refer 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 has added in and out modifiers to the generic type parameters for contravariance and covariance. See: Covariance and Contravariance in Generics. Examples:

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)
那伤。 2025-01-12 05:34:21

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

What you're looking for is an Action. It takes no parameters, and returns no value.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文