【发布时间】:2020-12-01 04:27:38
【问题描述】:
我收到以下错误: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, 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);
【问题讨论】:
-
Switch 表达式是表达式:它们应该返回一个值。使用普通的 switch 语句可能会更好。这样,您也可以将您的案例分组在一起,例如
case ValidationType.Success: case ValidationType.Information: setInfo(message, controllerInfo); break; -
这就是我对案例进行分组的方式:validationType switch { ValidationType.Critical => setFatal(message, controllerInfo), ValidationType.Exception | ValidationType.Error => setError(message, controllerInfo), ValidationType.Information | ValidationType.Success => setInfo(message, controllerInfo), ValidationType.Warning => setWarn(message, controllerInfo), _ => setError("invalid enum value", controllerInfo), };
-
这并不像你认为的那样。这与“异常或错误”不匹配,它执行异常和错误的二进制或,然后查看
validationType是否等于那个值。和问validationType == (ValidationType.Exception | ValidationType.Error)一模一样
标签: c# c#-8.0 switch-expression