2

クラスのプロパティをループして、各プロパティ タイプを取得したいと考えています。ほとんどの方法で取得しましたが、型を取得しようとすると、文字列、int などを取得する代わりに、型リフレクションを取得します。何か案は?さらに背景情報が必要な場合はお知らせください。ありがとう!

using System.Reflection;

Type oClassType = this.GetType(); //I'm calling this inside the class
PropertyInfo[] oClassProperties = oClassType.GetProperties();

foreach (PropertyInfo prop in oClassProperties)  //Loop thru properties works fine
{
    if (Nullable.GetUnderlyingType(prop.GetType()) == typeof(int))
        //should be integer type but prop.GetType() returns System.Reflection
    else if (Nullable.GetUnderlyingType(prop.GetType()) == typeof(string))
        //should be string type but prop.GetType() returns System.Reflection
    .
    .
    .
 }
4

3 に答える 3

14

まず、ここでは使用できません-これはPropertyInfoprop.GetType()のタイプです - つまり.prop.PropertyType

第二に、試してください:

var type = Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType;

GetUnderlyingType は、そうでない場合に返されるため、 null 許容または非null 許容のいずれであっても機能します。nullNullable<T>

その後、次のようになります。

if(type == typeof(int)) {...}
else if(type == typeof(string)) {...}

または代替:

switch(Type.GetTypeCode(type)) {
    case TypeCode.Int32: /* ... */ break;
    case TypeCode.String: /* ... */ break;
    ...
}
于 2012-06-07T21:03:54.410 に答える
3

あなたはほとんどそこにいます。PropertyInfoクラスには、プロパティのPropertyType型を返すプロパティがあります。インスタンスを呼び出すGetType()と、実際には、反映しているメンバーのタイプを取得するだけです。PropertyInfoRuntimePropertyInfo

したがって、すべてのメンバー プロパティの Type を取得するには、次のようにするだけです。 oClassType.GetProperties().Select(p => p.PropertyType)

于 2012-06-07T21:02:58.847 に答える
1

PropertyType プロパティを使用します。

http://msdn.microsoft.com/en-us/library/system.reflection.propertyinfo.propertytype

于 2012-06-07T21:03:49.183 に答える