假设我有以下方法。在某些情况下,这个方法可能会抛出异常并显示错误消息。但是,在其他情况下,它会返回一个值。
public IEnumerable<ValidationResult> Validate(UserLoginCommand command)
{
User user = userRepository.Get(u => u.Email == command.UserEmail);
if(user != null)
{
if(!user.Activated)
{
return new IEnumerable<ValidationResult>() {new ValidationResult("NotActived", Resources.UserNotActivated)};
}
if(user.IsPasswordIncorrent)
{
yield return new ValidationResult("IncorrectPassword", Resources.IncorrentPassword);
}
}
}
实际情况要复杂得多,但为了说明目的,我省略了很多内容。
关键在于,在某些情况下,我希望迭代器继续收集多个错误……但在其他情况下,存在致命错误,我只想返回一个错误,但它不允许我这样做:
Iterator cannot contain return statement
我该怎么办?
yield
和return
。我建议去掉yield
,自己构建枚举。但我希望Jon Skeet或Eric Lippert能够详细解释为什么编译器无法处理这种情况。 - Mike Christensen