2010-11-27 45 views
7

Soy nuevo en C#, quiero escribir una función para iterar sobre las propiedades de un objeto y establecer todas las cadenas nulas en "". He oído que es posible usar algo llamado "Reflexión", pero no sé cómo.¿Cómo iterar en todas las propiedades de un objeto en C#?

Gracias

+2

Eso suena como una cosa bastante extraño estar haciendo. Tengo curiosidad por saber lo que estás tratando de lograr con eso? – andynormancx

+0

En una nota lateral, es posible que desee considerar establecer sus cadenas nulas en "String.Empty" en lugar de "". El impacto en el mundo real es insignificante, pero por el bien de un código eficiente, el primero no crea un nuevo objeto. – Cranialsurge

+0

Además, estoy de acuerdo con andynormancx ... ¿cuál es su objetivo aquí? – Cranialsurge

Respuesta

19
public class Foo 
{ 
    public string Prop1 { get; set; } 
    public string Prop2 { get; set; } 
    public int Prop3 { get; set; } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     var foo = new Foo(); 

     // Use reflection to get all string properties 
     // that have getters and setters 
     var properties = from p in typeof(Foo).GetProperties() 
         where p.PropertyType == typeof(string) && 
           p.CanRead && 
           p.CanWrite 
         select p; 

     foreach (var property in properties) 
     { 
      var value = (string)property.GetValue(foo, null); 
      if (value == null) 
      { 
       property.SetValue(foo, string.Empty, null); 
      } 
     } 

     // at this stage foo should no longer have null string properties 
    } 
} 
+2

+1 para revisar leer/escribir – Aliostad

+3

Sí, es importante verificar la lectura/escritura antes de leer/escribir. –

+0

Gracias por su respuesta. – Ristovak

1
foreach(PropertyInfo pi in myobject.GetType().GetProperties(BindingFlags.Public)) 
{ 
    if (pi.GetValue(myobject)==null) 
    { 
     // do something 
    } 
} 
Cuestiones relacionadas