2017-06-03 81 views
2

我需要獲得類別爲T - GetProperty<Foo>()的屬性列表。我嘗試了下面的代碼,但它失敗了。使用C#反射獲取T類屬性的列表

樣品等級:

public class Foo { 
    public int PropA { get; set; } 
    public string PropB { get; set; } 
} 

我嘗試下面的代碼:

public List<string> GetProperty<T>() where T : class { 

    List<string> propList = new List<string>(); 

    // get all public static properties of MyClass type 
    PropertyInfo[] propertyInfos; 
    propertyInfos = typeof(T).GetProperties(BindingFlags.Public | 
                BindingFlags.Static); 
    // sort properties by name 
    Array.Sort(propertyInfos, 
      delegate (PropertyInfo propertyInfo1,PropertyInfo propertyInfo2) { return propertyInfo1.Name.CompareTo(propertyInfo2.Name); }); 

    // write property names 
    foreach (PropertyInfo propertyInfo in propertyInfos) { 
     propList.Add(propertyInfo.Name); 
    } 

    return propList; 
} 

我需要的屬性名稱的列表

預期輸出:GetProperty<Foo>()

new List<string>() { 
    "PropA", 
    "PropB" 
} 

我嘗試了很多stackoverlow參考,但我無法獲得預期的輸出。

參考:

  1. c# getting ALL the properties of an object
  2. How to get the list of properties of a class?

請幫助我。

回答

5

您的綁定標誌不正確。

由於您的屬性不是靜態屬性,而是實例屬性,因此需要用BindingFlags.Instance替換BindingFlags.Static

propertyInfos = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance); 

這將適當地查找您的類型的公共,實例,非靜態屬性。您也可以完全省略綁定標誌,並在這種情況下獲得相同的結果。