के अंत तक पर मान जोड़कर मैं सिर्फ पता चला के बारे में yield return
, मैं वास्तव में अच्छा लगता है। मैं इस तरह एक विधि में इसका इस्तेमाल करते हैं:उपज वापसी जब एक मौजूदा IEnumerable
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
का उपयोग कर इस पुनर्लेखन के लिए संभव है?
ध्यान दें कि आप गलत वर्तनी है "मनमाना"। –
@EricLippert हा, वास्तव में। मैं हर समय यह गलत वर्तनी करता हूं। इस मामले में हालांकि यह सिर्फ एक उदाहरण सत्यापन नियम है क्योंकि मैंने अभी तक 'असली' काम नहीं किया है। – Oliver