I usually use this approach in my projects:
signature:
bool TryLogin(string username, string password, out User user);
usage:
User user;
if(userService.TryLogin(username, password, out user)))
{
// do stuff with user
}
else
{
// show "login failed"
}
You could expand this to return your Enum:
signature:
enum LoginResult
{
Successful
UnknownUser,
WrongPassword
}
LoginResult TryLogin(string username, string password, out User user);
usage:
User user;
LoginResult loginResult;
if((loginResult = userService.TryLogin(username, password, out user)) == LoginResult.Successful)
{
// do stuff with user
}
else
{
// do stuff with loginResult
}