问题描述
我遇到以下错误: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);