我在下面有一个ValidationAttribute
,它验证在表单上输入了一定数量的值。目前,它仅用于类型为short?[]
public class RequiredArrayLength : ValidationAttribute
{
public int TotalRequired { get; set; }
public override bool IsValid(object value)
{
if(value != null)
{
var array = value as short?[];
return array.Where(v => v.HasValue).Count() >= TotalRequired;
}
return false;
}
}
有没有办法可以修改此ValidationAttribute
,以便它可以与其他数字数组一起使用,例如int?[]
答案 0 :(得分:0)
一种选择是转换为IEnumerable
(System.Collections
命名空间)并枚举该集合以确定集合中的项目数。
IEnumerable collection = value as IEnumerable;
if (collection!= null)
{
IEnumerator enumerator = collection.GetEnumerator();
int count = 0;
while(enumerator.MoveNext())
{
count++;
}
return count >= TotalRequired;
}
return false;
如果您只想计算非空值,请将代码修改为
while(enumerator.MoveNext())
{
if (enumerator.Current != null)
{
count++;
}
}
如果您特别希望将此限制为仅限数字数据类型,则可以使用.GetType()
IEnumerable
方法来测试type
(例如,C# - how to determine whether a Type is a number)