Как правильно использовать C# 8.0 корпус переключателя - PullRequest
3 голосов
/ 21 января 2020

Я пытался внедрить c# 8.0 switch-case, но, к сожалению, он не работает, я хочу, чтобы, если case удовлетворен, чтобы вернуть заданную c строку для этого удовлетворенного регистра в выражении switch.

Вот мой код:

public static void GetErrMsg(Exception ex) =>
   ex switch
   {
       ex is UserNotFoundException => "User is not found.",
       ex is NotAuthorizedException => "You'r not authorized."
   };

Но я получаю следующее сообщение:

Ошибка CS0201 Можно использовать только выражения присваивания, вызова, приращения, уменьшения, ожидания и новые выражения объекта как оператор.

Ошибка CS0029 Не удалось неявно преобразовать тип 'bool' в 'System.Exception'

1 Ответ

8 голосов
/ 21 января 2020

Возможно что-то вроде:

    public static string GetErrMsg(Exception ex) =>
       ex switch
       {
           UserNotFoundException _ => "User is not found.",
           NotAuthorizedException _ => "You'r[e] not authorized.",
           _ => ex.Message, // or something; "Unknown error" perhaps
       };

_ здесь - сброс; если вы действительно хотите использовать что-то еще из обнаруженного типа, вы можете назвать его, например:

UserNotFoundException unfe => $"User is not found: {unfe.UserName}",
...