Giả sử tôi có phương thức sau đây. Trong một số đã đếnTrả về một phần tử đơn lẻ từ một khối lặp - Iterator không thể chứa câu lệnh return
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);
}
}
}
Tình hình thực tế phức tạp hơn một chút nhưng tôi đã bỏ rất nhiều mục đích minh họa. Vấn đề là trong một số trường hợp, tôi muốn lặp lại để tiếp tục thu thập nhiều lỗi ... nhưng trong các trường hợp khác có lỗi nghiêm trọng và tôi chỉ muốn trả lại một lỗi nhưng nó sẽ không cho phép tôi:
&hl=viIterator cannot contain return statement
Tôi nên làm gì?
Tôi cho rằng thông báo lỗi khá rõ ràng. Bạn không thể trộn 'yield' và' return', vì việc thực hiện hàm được hoãn lại cho đến khi trình vòng lặp được gọi. Tôi muốn đề nghị loại bỏ 'yield' và chỉ xây dựng điều tra của riêng bạn. Tôi hy vọng Jon Skeet hoặc Eric Lippert sẽ kêu vang ở đây về chính xác lý do tại sao trình biên dịch không thể xử lý trường hợp này mặc dù. –