1

Nullable(of Enum)aが実際Enumにリフレクションによってであるかどうかを判断するにはどうすればよいですか?

私は、データベース呼び出しから取得したTタイプのオブジェクトに動的にデータを取り込むメソッドを使用しています。IDataReader基本的に、データリーダーの序数をループし、序T数の名前に一致するすべてのプロパティとプロパティにデータを入力します(列名を変更するために属性マジックもスローされます)。他のすべての状況ではうまく機能しますが、プロパティをチェックするBaseTypeSystem.Enum、代わりに見つけることができます。System.ValueType したがって、列挙型チェックが失敗し、メソッドが爆破されます。

[編集: Type.IsEnum必要な方法で機能しません。ここでの主な問題は、TのBaseType階層には、それがであるとは何も書かれていないということですEnum。それをNullableタイプにすることは私のEnum権利を失うかのようです。]

何か案は?

4

4 に答える 4

7

少し面倒です:

  • タイプを取得PropertyInfo.PropertyType
  • テストIsGenericType
  • そうであれば、ジェネリック型を取得しますGetGenericTypeDefinition()
  • その型が等しい場合typeof(Nullable<>)、あなたは Nullable を持っています
  • 基になる(つまりEnum)タイプを取得しますNullable.GetUnderlyingType(propertyInfo.PropertyType)
于 2008-10-10T19:18:02.373 に答える
0

あなたの質問は不明です。Nullable に Enum があるか、null であるかを調べるために使用でき.HasValueますが、それは質問の目的ではないようです。リフレクションを使用して変数の型を取得し、IDataReader のデータを Object からその型にキャストしていますか?

于 2008-10-10T19:18:27.240 に答える
0

IDataReader から返される列は常に Nullable ですか? その場合、確認する簡単な方法は次のとおりです。

AnEnum? enumObj;
if (enumObj.HasValue)
{
  enumObj.Value.GetType().IsEnum();
}

それが役立つことを願っています。

于 2008-10-10T19:25:47.553 に答える