假設我有以下方法。在某些來到從迭代器塊返回單個元素 - 迭代器不能包含返回語句
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',因爲函數的執行被推遲到迭代器被調用。我建議擺脫「收益率」,並建立自己的枚舉。我希望Jon Skeet或者Eric Lippert會在這裏談談爲什麼編譯器不能處理這種情況。 –