自定义";至少“;属性
本文关键字:属性 至少 自定义 quot | 更新日期: 2023-09-27 18:21:32
我正在尝试创建一个属性来验证我的模型。
在我的模型中,我有一个列表。该列表必须具有确定数量的符合条件的项目,如"至少1个活动项目"或"至少1名以"John"为名称的活动项目"。
我的代码是这样的:
public class Foo
{
[AtLeast(1, new Tuple<string, object>("Active", true))]
public List<Item> ListOfSomething { get; set; }
[AtLeast(1, new Tuple<string, object>("Active", true), new Tuple<string, object>("Name", "John"))]
public List<Item> AnotherList { get; set; }
}
public class Item
{
public string Name { get; set; }
public bool Active { get; set; }
}
public class AtLeastAttribute : ValidationAttribute
{
public int MinLength { get; set; }
public Tuple<string, object>[] PropertiesAndValues { get; set; }
public AtLeastAttribute(int minLength,params Tuple<string, object>[] propsNValues)
{
MinLength = minLength;
PropertiesAndValues = propsNValues;
}
}
我试图传递一个Tuple<string, object>
来表示Property和所需的值。但我得到了这个错误:
属性参数必须是常量表达式、typeof表达式或属性参数类型的数组创建表达式
有人有办法做到这一点吗?
同意DavidG的评论;唯一的方法是提供某种常量create表达式,基本上只限于基元类型。如果您想实现这一点,那么您指定的所有约束值都应该可以从字符串转换。
然后你可以想出一些语法,比如
Name=John;Active=True
但并没有那么简单,您可能希望在字符串值中包含;
或=
,因此您需要弄清楚一些字符串语法和转义符:
Name='John'''s Pizza'
或
Name='John''s Pizza'
然后您需要解析这些信息;正则表达式可能能够做到这一点。
如果可以不使用包含用于拆分的字符的字符串值,只需在;
上拆分字符串,然后在=
上拆分,然后再进行presto。