1

私はここで質問を単純化しているので、この例は現実の世界では何の意味もありません。

public class BusinessEntity<T>
{
    public int Id {get; set;}
}

public class Customer : BusinessEntity<Customer>
{

    public string FirstName { get; set;}
    public string LastName { get; set;}
}

Customer クラスのプロパティをリフレクションで取得しようとすると、ジェネリック基本クラスのプロパティを取得できませんでした。BusinessEntity から Id を取得するには?

Type type = typeof(Customer);

PropertyInfo[] properties = type.GetProperties(); 
// Just FirstName and LastName listed here. I also need Id here 
4

3 に答える 3

2

いいえ、それは間違いなく 3 つのプロパティすべてを返します。実際のコードで/ / など (Idつまり、非公開)かどうかを確認してください。そうである場合は、次のように渡す必要があります。internalprotectedBindingFlags

PropertyInfo[] properties = type.GetProperties(
    BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

(デフォルトはパブリック + インスタンス + 静的)

また、実際のコードのフィールドではないことも確認してください。もしそれが:

public int Id;

それはフィールドであり、プロパティを作成する必要GetFields Idあります;p

于 2012-07-25T07:58:59.240 に答える
1

基本プロパティを取得するには、Type の BaseType プロパティを使用する必要があります

PropertyInfo[] baseProperties = typeof(Customer).BaseType.GetProperties(BindingFlags.DeclaredOnly);
PropertyInfo[] properties = typeof(Customer).GetProperties(); 
于 2012-07-25T08:00:41.933 に答える
1

問題は何ですか。コードは完全に問題なく、正しいプロパティを返します

Type type = typeof(Customer);
PropertyInfo[] properties = type.GetProperties(); 
foreach(var prop in properties)
{ Console.WriteLine(prop) }

結果

System.String FirstName 
System.String LastName 
Int32 Id
于 2012-07-25T08:01:40.637 に答える