2010-11-27 19 views
7

Je suis nouveau en C#, je veux écrire une fonction pour itérer sur les propriétés d'un objet et mettre toutes les chaînes NULL à "". J'ai entendu dire qu'il est possible d'utiliser quelque chose appelé "Réflexion" mais je ne sais pas comment.Comment itérer sur toutes les propriétés d'un objet en C#?

Merci

+2

Cela sonne comme une chose assez étrange de faire. Je suis curieux de savoir ce que vous essayez d'accomplir avec cela? – andynormancx

+0

D'un côté, vous pouvez envisager de définir vos chaînes NULL sur "String.Empty" au lieu de "". L'impact sur le monde réel est négligeable, mais pour des raisons de code efficace, le premier ne crée pas un nouvel objet. – Cranialsurge

+0

Aussi, je suis d'accord avec andynormancx .... quel est votre objectif ici? – Cranialsurge

Répondre

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 pour vérifier la lecture/écriture – Aliostad

+3

Oui, il est important de vérifier la lecture/écriture avant de lire/écrire. –

+0

Merci pour votre réponse. – Ristovak

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