2009-11-11 33 views
4

可以說我有一些隨機的.cs文件,其中包含具有各種屬性和方法的類。如何迭代.net類中的所有「公共字符串」屬性

如何迭代所有這些公共字符串屬性的名稱(作爲字符串)?

Example.cs:

Public class Example 
{ 
public string FieldA {get;set;} 
public string FieldB {get;set;} 
private string Message1 {get;set;} 
public int someInt {get;set;} 

public void Button1_Click(object sender, EventArgs e) 
{ 
    Message1 = "Fields: "; 
    ForEach(string propertyName in this.GetPublicStringProperties()) 
    { 
    Message1 += propertyName + ","; 
    } 
    // Message1 = "Fields: Field1,Field2" 
} 

private string[] GetPublicStringProperties() 
{ 
    //What do we put here to return {"Field1", "Field2"} ? 
} 
} 

回答

9
private string[] GetPublicStringProperties() 
{ 
    return this.GetType() 
     .GetProperties(BindingFlags.Public | BindingFlags.Instance) 
     .Where(pi => pi.PropertyType == typeof(string)) 
     .Select(pi => pi.Name) 
     .ToArray(); 
} 
+0

同上面:如何包含字符串屬性的檢查?我不想在我的例子中得到someInt。 – 2009-11-11 23:50:17

+0

更新爲typeof(字符串)檢查。 – DSO 2009-11-11 23:51:12

+0

哦,有一個「PropertyType」.. ofcourse :-)感謝您的完整解決方案。 – 2009-11-11 23:52:31

4

您可以使用TypeGetProperties方法:

GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance); 

這會給你PropertyInfo對象,每一個屬性的數組。

您可以檢查屬性是string財產檢查:

property.PropertyType == typeof(string) 

獲取屬性的名稱中使用property.Name

+0

很抱歉,但如何將其納入對字符串屬性進行檢查?我不想在我的例子中得到someInt。 – 2009-11-11 23:48:28

+0

謝謝,upvoted,但給DSO複選標記爲一個完整的複製粘貼能力的解決方案:-) – 2009-11-11 23:53:41

+0

@Thomas我已更新我的答案與屬性類型的檢查。 – 2009-11-11 23:54:50

1
var publicStringProperties = 
    from property in GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance) 
    where property.PropertyType == typeof(string) 
    select property.Name;