2016-11-15 10 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; 

あなたは唯一の非NULL値をカウントしたい場合は、具体的数値データのみのタイプにこれを制限したい場合は、の.GetType()方法を使用することができ、

while(enumerator.MoveNext()) 
{ 
    if (enumerator.Current != null) 
    { 
     count++; 
    } 
} 

にコードを変更IEnumerableを入力してtype(たとえば、C# - how to determine whether a Type is a number)をテストします。

+0

上記はnullデータ型を処理しますか? – mheptinstall

+0

はい、 'value'が' '[2、null、4]'の場合、 'count'の結果は3となります。 –

+1

null以外の値だけを数えたい場合には、' if(enumerator.Current! = null){count ++; } ' –

関連する問題