43 Stimmen

Wie man durch jede Eigenschaft eines benutzerdefinierten vb.net-Objekts zu iterieren?

Wie kann ich die einzelnen Eigenschaften in meinem benutzerdefinierten Objekt durchgehen? Es handelt sich nicht um ein Sammelobjekt, aber gibt es so etwas auch für Nicht-Sammelobjekte?

For Each entry as String in myObject
    ' Do stuff here...
Next

Es gibt String-, Integer- und Boolean-Eigenschaften in meinem Objekt.

68voto

Ali Ersöz Punkte 15342

Mit Hilfe der Reflexion können Sie das tun. In C# sieht es so aus;

PropertyInfo[] propertyInfo = myobject.GetType().GetProperties();

Eine VB.Net-Übersetzung wurde hinzugefügt:

Dim info() As PropertyInfo = myobject.GetType().GetProperties()

0 Stimmen

Wo befindet sich der Wert innerhalb der einzelnen Einträge?

0 Stimmen

Es gibt eine Methode namens propertyInfo.GetValue().

0 Stimmen

Wie funktioniert das im Zusammenhang mit einer For Each Schleife?

45voto

mmx Punkte 400975

Sie können verwenden System.Reflexion Namespace, um Informationen über den Objekttyp abzufragen.

For Each p As System.Reflection.PropertyInfo In obj.GetType().GetProperties()
   If p.CanRead Then
       Console.WriteLine("{0}: {1}", p.Name, p.GetValue(obj, Nothing))
   End If
Next

Bitte beachten Sie, dass es nicht empfehlenswert ist, diesen Ansatz anstelle von Sammlungen in Ihrem Code zu verwenden. Reflection ist eine leistungsintensive Sache und sollte mit Bedacht eingesetzt werden.

0 Stimmen

Ich hatte ein Problem. Es ist Fehler : Objektreferenz nicht auf eine Instanz eines Objekts gesetzt.

7voto

NicoJuicy Punkte 3317

System.Reflection ist "schwergewichtig", ich implementiere immer zuerst eine leichtere Methode.

//C#

if (item is IEnumerable) {
    foreach (object o in item as IEnumerable) {
            //do function
    }
} else {
    foreach (System.Reflection.PropertyInfo p in obj.GetType().GetProperties())      {
        if (p.CanRead) {
            Console.WriteLine("{0}: {1}", p.Name, p.GetValue(obj,  null)); //possible function
        }
    }
}

VB.Net

  If TypeOf item Is IEnumerable Then

    For Each o As Object In TryCast(item, IEnumerable)
               'Do Function
     Next
  Else
    For Each p As System.Reflection.PropertyInfo In obj.GetType().GetProperties()
         If p.CanRead Then
               Console.WriteLine("{0}: {1}", p.Name, p.GetValue(obj, Nothing))  'possible function
          End If
      Next
  End If

1voto

Charles Bretana Punkte 137391

Sie können Reflection verwenden... Mit Reflection können Sie jedes Mitglied einer Klasse (eines Typs), Eigenschaften, Methoden, Konstruktoren, Felder, etc. untersuchen.

using System.Reflection;

Type type = job.GetType();
    foreach ( MemberInfo memInfo in type.GetMembers() )
       if (memInfo is PropertyInfo)
       {
            // Do Something
       }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X