从迭代器块返回单个元素 - 迭代器不能包含return语句

par*_*ent 5 .net c# iterator yield c#-4.0

假设我有以下方法.有些人来了

    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);

            }

        }
    }
Run Code Online (Sandbox Code Playgroud)

实际情况实际上有点复杂,但为了说明目的,我留下了很多.

关键是在某些情况下,我想迭代器继续收集多个错误...但在其他情况下有一个致命的错误,我只想返回一个错误,但它不会让我:

Iterator cannot contain return statement 
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

Pau*_*ips 10

如果您只想返回大小为1的集合,则可以执行以下操作:

if(!user.Activated)
{
  yield return new ValidationResult("NotActived", Resources.UserNotActivated);
  yield break;
}
Run Code Online (Sandbox Code Playgroud)