2013-11-21 22 views
0

我有一個類:C#:如何返回一個對象的所有屬性的名稱列表?

public class foo 
{ 
    public IEnumerable<string> stst_soldToALTKN { get; set; } 
    public int sId { get; set; }   
    public string stst_LegalName { get; set; } 
    public string stst_TradeName { get; set; } 
    public string stst_StreetAddress { get; set; } 
} 

有沒有我可以調用會返回一個列表/ IEnumerable的每個屬性的名稱的方法???

例如:

blah foo1 = new foo(); 
ienumerable<string> foo1List = GetAllPropertyNames(foo1); 
foo1List.ToList(); 

結果: 'stst_soldToALTKN', 'SID', 'stst_LegalName', 'stst_TradeName', 'stst_StreetAddress'

回答

2
var propNames = foo1.GetType() 
        .GetProperties() 
        .Select(pi => pi.Name) 
+0

你大概的意思'Name',而不是'成員名稱',不是嗎? –

+0

@JeroenVannevel是的,我和'MemberType'混淆了。 –

0

您可以使用反射來得到的屬性列表並從他們中選擇名稱:

var foo1 = new foo(); 
var propertyNames = foo1.GetType() 
    .GetProperties(BindingFlags.Public | BindingFlag.Instance) 
    .Select(p => p.Name) 
    .ToList(); 

propertyNames現在將是一個List<string>

順便說一句,你不需要foo這個實例工作。您可以通過執行獲得它的類型,而不是:

var propertyNames = typeof(foo) 
    .GetProperties(BindingFlags.Public | BindingFlag.Instance) 
    .Select(p => p.Name) 
    .ToList(); 
1

你可以嘗試

var propertyNames = foo1.GetType() 
        .GetProperties() 
        .Select(x => x.Name).ToList(); 
0

您可以使用此:

public IEnumerable<string> GetAllPropertyNames(object o) 
{ 
    foreach (PropertyInfo propInfo in o.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance)) 
    yield return propInfo.Name; 
} 
相關問題