📌  相关文章
📜  [Range(typeof(bool),"true","true", - C# (1)

📅  最后修改于: 2023-12-03 14:38:56.894000             🧑  作者: Mango

Range特性介绍

在C#中,我们可以使用特性(Attribute)为方法、类、属性等添加一些元数据。其中有一种特性叫做Range,其作用是限定数值属性的值的范围。本篇文章将为大家详细介绍Range特性的用法。

语法格式
[Range(typeof(T), minimum, maximum)]
参数说明:
  • T:指定数据类型,可以是 bytesbyteshortushortintuintlongulongfloatdoubledecimalcharSystem.DateTime 等。必须指定,不能为空。
  • minimum:表示该数据类型所允许的最小值,可以为空,默认值是该类型的最小值。当minimum为字符串类型时,该参数的值必须与要限定的属性的数据类型一致。
  • maximum:表示该数据类型所允许的最大值,可以为空,默认值是该类型的最大值。当maximum为字符串类型时,该参数的值必须与要限定的属性的数据类型一致。
示例

使用Range特性来限制属性值的取值范围,以下是示例代码:

public class Person
{
    [Range(typeof(int), 0, 120)]
    public int Age { get; set; }

    [Range(typeof(decimal), "50.00", "100.00")]
    public decimal Salary { get; set; }
}

public class Program
{
    static void Main(string[] args)
    {
        Person p = new Person() { Age = 130, Salary = 220 };

        var validationResults = new List<ValidationResult>();
        bool isValid = Validator.TryValidateObject(p, new ValidationContext(p), validationResults, true);

        if (!isValid)
        {
            foreach (var validationResult in validationResults)
            {
                Console.WriteLine(validationResult.ErrorMessage);
            }
        }
    }
}

运行结果为:

The field Age must be between 0 and 120.
The field Salary must be between 50.00 and 100.00.

从结果可以看出,当输入的属性值超出限定范围时,Validator.TryValidateObject函数会返回false并且将错误信息保存在validationResults中。

小结

通过本篇文章的介绍,我们了解了Range特性的用法以及如何使用Validator.TryValidateObject函数进行验证。使用该特性可以让我们的代码更加健壮,减少了出错的可能性。