Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#8.0带void的switch语句_C#_C# 8.0_Switch Expression - Fatal编程技术网

C#8.0带void的switch语句

C#8.0带void的switch语句,c#,c#-8.0,switch-expression,C#,C# 8.0,Switch Expression,我收到以下错误:只有赋值、调用、递增、递减、等待和新对象表达式可以用作语句 public void LogClientSideErrors(string message, ValidationType validationType) => validationType switch { ValidationType.Success => setInfo(message, controllerInfo),

我收到以下错误:
只有赋值、调用、递增、递减、等待和新对象表达式可以用作语句

public void LogClientSideErrors(string message, ValidationType validationType)
        => validationType switch
            {
                ValidationType.Success => setInfo(message, controllerInfo),
                ValidationType.Critical => setFatal(message, controllerInfo),
                ValidationType.Error => setError(message, controllerInfo),
                ValidationType.Exception => setError(message, controllerInfo),
                ValidationType.Information => setInfo(message, controllerInfo),
                ValidationType.Warning => setWarn(message, controllerInfo),
                _ => setError("invalid enum value", controllerInfo),
            }; 
更新:工作解决方案:

internal static void GenerateLogs(string message, string controllerInfo, ValidationType validationType)
        => (validationType switch
        {
            var x when x == ValidationType.Success || x == ValidationType.Information => new Action<string, string>(setInfo),
            ValidationType.Critical => setFatal,
            var x when x == ValidationType.Error || x == ValidationType.Exception => setError,
            ValidationType.Warning => setWarn,
            _ => (_, controllerInfo) => setError("invalid enum value", controllerInfo),
        })(message, controllerInfo);
内部静态无效生成日志(字符串消息、字符串控制器信息、ValidationType ValidationType)
=>(验证类型开关
{
当x==ValidationType.Success | | x==ValidationType.Information=>newaction(setInfo)时的变量x,
ValidationType.Critical=>setFatal,
当x==ValidationType.Error | | x==ValidationType.Exception=>setError时的变量x,
ValidationType.Warning=>setWarn,
_=>(\ux,controllerInfo)=>setError(“无效枚举值”,controllerInfo),
})(信息,controllerInfo);

开关表达式期望您从每个分支返回一些内容,但您正在尝试运行void方法。您可以让这些方法返回一些东西,使用常规开关,或者您可以返回
Action
,然后调用它,如下所示

public void LogClientSideErrors(string message, ValidationType validationType)
    => (validationType switch
        {
            ValidationType.Success => new Action<string, string>(setInfo),
            ValidationType.Critical => setFatal,
            ValidationType.Error => setError,
            ValidationType.Exception => setError,
            ValidationType.Information => setInfo,
            ValidationType.Warning => setWarn,
            _ => (_, ci) => setError("invalid enum value", ci),
        })(message, controllerInfo);
public void LogClientSideErrors(字符串消息,ValidationType ValidationType)
=>(验证类型开关
{
ValidationType.Success=>新操作(setInfo),
ValidationType.Critical=>setFatal,
ValidationType.Error=>setError,
ValidationType.Exception=>setError,
ValidationType.Information=>setInfo,
ValidationType.Warning=>setWarn,
_=>(\ux,ci)=>setError(“无效枚举值”,ci),
})(信息,controllerInfo);

开关表达式期望您从每个分支返回一些内容,但您正在尝试运行void方法。您可以让这些方法返回一些东西,使用常规开关,或者您可以返回
Action
,然后调用它,如下所示

public void LogClientSideErrors(string message, ValidationType validationType)
    => (validationType switch
        {
            ValidationType.Success => new Action<string, string>(setInfo),
            ValidationType.Critical => setFatal,
            ValidationType.Error => setError,
            ValidationType.Exception => setError,
            ValidationType.Information => setInfo,
            ValidationType.Warning => setWarn,
            _ => (_, ci) => setError("invalid enum value", ci),
        })(message, controllerInfo);
public void LogClientSideErrors(字符串消息,ValidationType ValidationType)
=>(验证类型开关
{
ValidationType.Success=>新操作(setInfo),
ValidationType.Critical=>setFatal,
ValidationType.Error=>setError,
ValidationType.Exception=>setError,
ValidationType.Information=>setInfo,
ValidationType.Warning=>setWarn,
_=>(\ux,ci)=>setError(“无效枚举值”,ci),
})(信息,controllerInfo);

差不多,但不完全一样。您需要在
验证类型开关{…}
周围设置参数,并且需要告诉编译器委托类型是什么。controllerInfo是一个字符串。谢谢你帮我。我改变了退货类型,结果成功了。我尝试了您提供的修复,但出现以下错误:message and controllerinfo在当前上下文中不存在(重新措辞)你能分享更多的实现细节或参考资料吗?我很想了解更多。@Muhammadhammaroof as conton7提到这实际上需要整个开关表达式的参数,并且它需要一个选项来定义
操作
类型。几乎但不完全如此。您需要在
验证类型开关{…}
周围设置参数,并且需要告诉编译器委托类型是什么。controllerInfo是一个字符串。谢谢你帮我。我改变了退货类型,结果成功了。我尝试了您提供的修复,但出现以下错误:message and controllerinfo在当前上下文中不存在(重新措辞)你能分享更多的实现细节或参考资料吗?我很想了解更多。@Muhammadhammaroof as conton7提到这实际上需要整个开关表达式的参数,它需要一个选项来定义
操作
类型。开关表达式是表达式:它们应该返回一个值。你最好用一个普通的switch语句。这样,您也可以将案例分组,例如,
case ValidationType.Success:case ValidationType.Information:setInfo(message,controllerInfo);中断这是我分组案例的方式:validationType开关{validationType.Critical=>setFatal(message,controllerInfo),validationType.Exception | validationType.Error=>setError(message,controllerInfo),validationType.Information | validationType.Success=>setInfo(message,controllerInfo),ValidationType.Warning=>setWarn(message,controllerInfo),\u=>setError(“无效枚举值”,controllerInfo),};这与您认为的不一样。这与“异常或错误”不匹配,它执行异常和错误的二进制或,然后查看
validationType
是否等于该值。与询问
validationType==(validationType.Exception | validationType.Error)完全相同
Switch表达式是表达式:它们应该返回一个值。您最好使用普通的Switch语句。这样您也可以将案例分组在一起,例如
case ValidationType。成功:case ValidationType。信息:setInfo(message,controllerInfo);break;
这就是我分组案例的方式:validationType开关{validationType.Critical=>setFatal(message,controllerInfo),validationType.Exception | validationType.Error=>setError(message,controllerInfo),validationType.Information | validationType.Success=>setInfo(message,controllerInfo),ValidationType.Warning=>setWarn(message,controllerInfo),\u=>setError(“无效枚举值”,controllerInfo),};这与您认为的不一样。这与“异常或错误”不匹配,它执行异常和错误的二进制或,然后查看
validationType
是否等于该值。与询问
validationType==(validationType.Exception | validationType.Error)完全相同