2009-07-06 13 views
2

私は、リフレクションを使ってクラスの静的プロパティをリストするメソッドを持っていますが、私は特定の型のものだけに興味があります(私の場合、プロパティはDataTableから派生した型でなければなりません) 。私が望むのは、次のif()文のようなものです(現在は常にtrueを返します)。左のタイプでIS演算子をどのように使用しますか?

PropertyInfo[] properties = (typeof(MyType)).GetProperties(BindingFlags.Public 
    | BindingFlags.Static); 

foreach(PropertyInfo propertyInfo in properties) { 
    if(!(propertyInfo.PropertyType is DataTable)) 
     continue; 

    //business code here 
} 

ありがとう、私は困惑しています。

答えて

8

"is"演算子の代わりにType.IsAssignableFromを使用する必要があります。

これは次のようになります。PropertyTypeははデータテーブルまたはデータテーブルのサブクラスである場合

if(!(DataTable.IsAssignableFrom(propertyInfo.PropertyType)) 

DataTable.IsAssignableFrom(propertyInfo.PropertyType)はtrueになります。

1
if(!(propertyInfo.PropertyType.isSubClassOf(typeof(DataTable))) 
continue; 

私はそれをするべきだと思います。

+2

PropertyTypeがDataTableの場合は失敗します。 –

+1

私はそれを知らなかったが、意味がある。 – Kazar

1
if (!(typeof(DataTable).IsAssignableFrom(propertyInfo.PropertyType))) 

ここ順序は、おそらく少し後方ようだが、Type.IsAssignableFromのために、あなたが最初に来て、あなたがチェックしているタイプすると協力する必要があるタイプが欲しいです。