gpt4 book ai didi

c# - 将值附加到现有 IEnumerable 的末尾时产生返回

转载 作者:太空狗 更新时间:2023-10-29 21:18:46 24 4
gpt4 key购买 nike

我刚知道yield return,我看起来很不错。我用这样的方法使用它:

public IEnumerable<ValidationResult> Validate(ValidationContext vc)
{
if (Name == "Arbitary")
yield return new ValidationResult("Bad Name.", new[] { "Name" });
else if (Email == "BadEmail")
yield return new ValidationResult("Bad Email.", new [] {"Email" });
// further rules follow.
}

但是,我需要更改此方法以从子方法返回一些 ValidationResults。如果不使用 yield,代码将如下所示:

public override IEnumerable<ValidationResult> Validate(ValidationContext vc)
{
// TryValidateObject fills the ICollection you pass it.
List<ValidationResult> retVal = new List<ValidationResult>();
Validator.TryValidateObject(this, vc, retVal, true);

if (Name == "Arbitary")
retVal.Add(new ValidationResult("Bad Name.", new[] { "Name" }));
else if (Email == "BadEmail")
retVal.Add(new ValidationResult("Bad Email.", new[] { "Email" }));

return retVal;
}

是否可以使用 yield 重写它?

最佳答案

你在找这个吗?

public override IEnumerable<ValidationResult> Validate(ValidationContext vc)
{
// TryValidateObject fills the ICollection you pass it.
List<ValidationResult> retVal = new List<ValidationResult>();
Validator.TryValidateObject(this, vc, retVal, true);
foreach (var item in retVal)
yield return item;
if (Name == "Arbitary")
yield return new ValidationResult("Bad Name.", new[] { "Name" });
else if (Email == "BadEmail")
yield return new ValidationResult("Bad Email.", new[] { "Email" });
}

如果是这样,我相信第一个版本看起来更好。

关于c# - 将值附加到现有 IEnumerable 的末尾时产生返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10105279/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com