提问人:Masterseth98 提问时间:6/20/2022 更新时间:6/20/2022 访问量:177
如何在 C# 中检查较高值是动态的范围?
How do I check a range where the higher value is dynamic in C#?
问:
目前我正在编写的程序需要检查用户给出的年份是否在一定范围内。底值是一个固定值,但这个范围的上限应该限制在当年,并在我们进入新的一年时自行更新。我尝试使用分配给 int 值的 DateTime.Now.Year 进行比较,但范围无法比较非静态值。
[Range(1900, 2022, ErrorMessage = "Property built before 1900.")]
上面是有问题的线。有什么建议吗?
答:
0赞
D Stanley
6/20/2022
#1
您不能使用属性执行此操作。属性必须使用常量值。您可以验证方法中的数据,也可以只使用最小值(因为这似乎是一个常量。
0赞
Serg
6/20/2022
#2
您不能用于此任务,因为它仅适用于 min/max 的常量值。RangeAttribute
但是,您可以为此任务创建自定义验证属性。类似的东西
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false)]
public class YearRangeAttribute : RangeAttribute
{
public YearRangeAttribute(int minimum) : base(minimum, DateTime.Now.Year)
{
}
}
在这里,我们从构造函数中隐藏该值,并在内部将其设置为当前年份。在其他方面,我们的新属性正常工作。maximum
RangeAttribute
这里的问题是,在创建属性实例时已修复。因此,如果您在 12 月 31 日启动一个程序,那么在运行 24 小时后您将遇到问题,因为实际年份会更改,但您不会。maximimum
maximum
不幸的是,属性不是虚拟的,因此您无法覆盖它。Maximum
RangeAttribute
这个问题可以通过自定义归因来解决,它不是从 中固有的,而是从 中固有的。然后,您可以重新实现 (此处提供的源代码) 的逻辑。您可以抛弃大部分引用实现,只为 实现所有逻辑。RangeAttribute
ValidationAttribute
RangeAttribute
int
评论