无效的C#8.0 switch语句

问题描述

我遇到以下错误Only assignment,call,increment,decrement,await,and new object expressions can be used as a statement

public void LogClientSideErrors(string message,ValidationType validationType)
        => validationType switch
            {
                ValidationType.Success => setInfo(message,controllerInfo),ValidationType.Critical => setFatal(message,ValidationType.Error => setError(message,ValidationType.Exception => setError(message,ValidationType.information => setInfo(message,ValidationType.Warning => setWarn(message,_ => setError("invalid enum value",}; 

更新:有效的解决方案:

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",})(message,controllerInfo);

解决方法

一个switch表达式期望您将从每个分支中返回一些内容,但是您试图运行void方法。您可以使这些方法返回某些值,使用常规开关,也可以返回Action<string,string>然后调用它,就像这样。

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