gpt4 book ai didi

c# - 尝试声明 Func 时,不能在此上下文中使用关键字 'void'

转载 作者:行者123 更新时间:2023-12-01 22:36:52 25 4
gpt4 key购买 nike

假设我有以下方法:

private TResult CallWithSuccessHandler<TResult>(Func<TResult> func, System.Action onSuccess = null, System.Action onFailure = null)
{
try
{
var result = func();
if (onSuccess != null) onSuccess();
return result;
}
catch (Exception ex)
{
if (onFailure != null) onFailure();
throw;
}
}

我可以像这样调用这个方法:

var simpleFunc = new Func<int>(() => { return 1; });
var result = CallWithSuccessHandler(simpleFunc, null, null);

这在 Visual Studio 中编译没有任何问题并且工作正常。

但是,我想不通的是如何使用不返回任何内容的“Func”调用 CallwithSucessHandler 方法。换句话说,我需要“func”来返回“void”。

我尝试了以下操作:

var voidFunc = new Func<void>(() => { return; });
CallWithSuccessHandler(voidFunc, null, null);

但 Visual Studio 拒绝编译并显示以下错误消息:

"Keyword 'void' cannot be used in this context"

具体来说,Visual Studio 不喜欢“new Func < void >”。

返回“无”的 Func 的正确语法是什么?

最佳答案

Func<>定义一个返回某些东西的函数。你不能告诉它什么都不返回,因为这没有意义。使用委托(delegate)的代码需要一个值(即您的 CallWithSuccessHandler ,它必须返回函数的结果)并且根据定义 void 不能是一个值。

你可以返回一个虚拟值,也许是一个 bool 值,但你必须返回一些东西。

正如另一个答案所指出的,还有 Action它不返回值。但是,它与采用 Func<> 的方法不兼容。 ,无论是在类型签名还是在语义方面。

你可以有两个版本的 CallWithSuccessHandler : 需要 Func<> 的一个还有一个需要 Action . Action 的版本返回类型为 void。

关于c# - 尝试声明 Func<void> 时,不能在此上下文中使用关键字 'void',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21769062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com