Возвращаемое значение передовой практики против исключения против Enum [закрыто]

Я пытаюсь выяснить преимущества и недостатки метода с несколькими значениями результата.

Например я использую метод входа в систему. Если вход был успешным, он пройдет, в противном случае мне нужно знать, почему это не удалось.

1. Верните true или false (Не хватает информации)

bool Login(string user, string password);

2. Верните true, если оно прошло успешно, в противном случае выведите исключение

public class UnknownUserException : Exception { }
public class WrongPasswordException : Exception { }
bool Login(string user, string password);

3. Ничего не возвращай. Брось исключение, если это не удалось

public class UnknownUserException : Exception { }
public class WrongPasswordException : Exception { }
void Login(string user, string password);

4. Вернуть значение перечисления

enum LoginResult
{
    Successful
    UnknownUser,
    WrongPassword
}
LoginResult Login(string user, string password);

«Логин» - это только один пример. Я хотел бы знать, каковы преимущества и недостатки различных реализаций, и для каких случаев они более или менее подходят.

Ответы на вопрос(4)

Ваш ответ на вопрос