2016-11-15 114 views
1

我有一個ValidationAttribute像下面這樣驗證在表單上輸入了一定數量的值。目前,它僅被一個屬性使用類型short?[]自定義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

一個選項努力將轉換爲IEnumerableSystem.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'是'[2,null,4]','count'的結果是3 –

+1

如果你只想計算非空值,那麼你可以使用'if(enumerator.Current! = null){count ++; }' –