Оператор переключения C# 8.0 с void
Я получаю следующую ошибку: 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);
1 ответ
Выражение 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);