2016-11-15 6 views
1

У меня есть ValidationAttribute, как показано ниже, где проверяется, что определенное количество значений было введено в форме. В настоящее время она используется только на свойстве с типом short?[]Custom ValidationAttribute для нескольких типов данных

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

Одним из вариантов было бы бросить в 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).

+0

Имеет ли вышеуказанный дескриптор нулевые типы данных? – mheptinstall

+0

Да, если 'value' is' [2, null, 4] ', результат' count' будет равен 3 –

+1

Если вы хотите считать только ненулевые значения, вы можете использовать 'if (enumerator.Current! = null) {count ++; } ' –

Смежные вопросы