以下是特性StringLength的代码实现:

[AttributeUsage(AttributeTargets.Property)]
public class StringLengthAttribute : AbstractValidateAttribute
{
    private readonly int _maxLength;

    public StringLengthAttribute(int maxLength)
    {
        _maxLength = maxLength;
    }

    public override bool Validate(object value)
    {
        if (value is string str)
        {
            return str.Length <= _maxLength;
        }
        return true; // 非字符串类型默认通过验证
    }
}

使用方式示例:

public class Person
{
    [StringLength(10)]
    public string Name { get; set; }
}

var person = new Person { Name = "John" };
var validator = new Validator();
var result = validator.Validate(person);
if (result.IsValid)
{
    Console.WriteLine("Validation passed.");
}
else
{
    Console.WriteLine("Validation failed: " + result.ErrorMessage);
}

这里使用了一个Validator类作为验证器,它的实现可以参考前面的文章“设计一个简单的验证器”。如果Name的长度超过10,验证结果会返回false

设计一个特性StringLength它包含一个整数N这意味着构造时需传入一个整数它只能作用于属性用于判断某个字符串属性的长度是否超过N;参考Attribute代码让你的特性继承AbstractValidateAttribute并重写validate方法验证你的特性是否能够工作。

原文地址: https://www.cveoy.top/t/topic/dxz5 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录