2010-11-27 15 views
7

Ich bin neu in C#, ich möchte eine Funktion schreiben, über Eigenschaften eines Objekts zu durchlaufen und stellen Sie alle Null-Strings auf „“. Ich habe gehört, dass es möglich ist, etwas namens "Reflection" zu verwenden, aber ich weiß nicht wie.Wie wird auf alle Eigenschaften eines Objekts in C# iteriert?

Dank

+2

sehen, dass wie eine ziemlich seltsame Sache klingt zu tun. Ich bin neugierig zu wissen, was Sie damit erreichen wollen? – andynormancx

+0

Als Randnotiz möchten Sie vielleicht Ihre Nullstrings auf "String.Empty" anstatt auf "" einstellen. Der Einfluss der realen Welt ist vernachlässigbar, aber aus Gründen des effizienten Codes erzeugt der erstere kein neues Objekt. – Cranialsurge

+0

Auch stimme ich mit andynormancx .... was ist Ihr Ziel hier? – Cranialsurge

Antwort

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 für die Überprüfung lesen/schreiben – Aliostad

+3

Ja, vor dem Lesen/Schreiben ist das Lesen/Schreiben wichtig. –

+0

Danke für Ihre Antwort. – Ristovak

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