gpt4 book ai didi

c# - 如何将验证属性应用于集合中的对象?

转载 作者:太空狗 更新时间:2023-10-29 23:40:04 27 4
gpt4 key购买 nike

基本上,如果我有一个对象集合,我如何将验证属性应用到集合中的每个项目(例如 MaxLengthAttribute)?

public class Foo
{
public ICollection<string> Bars { get; set; }
}

例如,我如何确保 Bars 包含的字符串可验证最大长度为 256?

更新:

我了解如何将验证属性应用于单个属性,但问题是如何将其应用于集合中的对象。

public class Foo
{
[StringLength(256)] // This is obvious
public string Bar { get; set; }

// How do you apply the necessary attribute to each object in the collection!
public ICollection<string> Bars { get; set; }
}

最佳答案

我知道这个问题有点老了,但也许有人会来寻找答案。

我不知道将属性应用于集合项的通用方法,但对于特定的字符串长度示例,我使用了以下方法:

public class StringEnumerationLengthValidationAttribute : StringLengthAttribute
{
public StringEnumerationLengthValidationAttribute(int maximumLength)
: base(maximumLength)
{ }

public override bool RequiresValidationContext { get { return true; } }
public override bool IsValid(object value)
{ return false; }

protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var e1 = value as IEnumerable<string>;
if (e1 != null) return IsEnumerationValid(e1, validationContext);
return ValidationResult.Success; // what if applied to something else than IEnumerable<string> or it is null?
}

protected ValidationResult IsEnumerationValid(IEnumerable<string> coll, ValidationContext validationContext)
{
foreach (var item in coll)
{
// utilize the actual StringLengthAttribute to validate the items
if (!base.IsValid(item) || (MinimumLength > 0 && item == null))
{
return new ValidationResult(base.FormatErrorMessage(validationContext.DisplayName));
}
}
return ValidationResult.Success;
}
}

申请如下,要求每个收藏品4-10个字符:

[StringEnumerationLengthValidation(10, MinimumLength=4)]
public ICollection<string> Sample { get; set; }

关于c# - 如何将验证属性应用于集合中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14097474/

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