📅  最后修改于: 2023-12-03 14:38:56.894000             🧑  作者: Mango
在C#中,我们可以使用特性(Attribute)为方法、类、属性等添加一些元数据。其中有一种特性叫做Range
,其作用是限定数值属性的值的范围。本篇文章将为大家详细介绍Range
特性的用法。
[Range(typeof(T), minimum, maximum)]
T
:指定数据类型,可以是 byte
、sbyte
、short
、ushort
、int
、uint
、long
、ulong
、float
、double
、decimal
、char
或 System.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
函数进行验证。使用该特性可以让我们的代码更加健壮,减少了出错的可能性。