Cómo iterar todas las propiedades de “cadena pública” en una clase .net

Digamos que tengo un archivo .cs aleatorio que contiene una clase con algunas propiedades y métodos de todo tipo.

¿Cómo puedo iterar los nombres (como cadenas) de todas estas propiedades de cadena públicas?

Ejemplo.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"} ? } } 

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

Puedes usar el método GetProperties de Type :

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

Esto le dará una matriz de objetos PropertyInfo , uno para cada propiedad.

Puede comprobar que la propiedad es una propiedad de string comprobando que:

 property.PropertyType == typeof(string) 

Para obtener los nombres de las propiedades use property.Name .

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