2008-11-24 11 views

Odpowiedz

59

Używając refleksji, możesz to zrobić. W języku C# wygląda tak;

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

Dodano tłumaczenie VB.Net:

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

Gdzie jest wartość w każdym wpisie? – Anders

+0

Istnieje metoda o nazwie propertyInfo.GetValue(). –

+0

Jak to działa w kontekście pętli 'For Each'? – tmsimont

1

Można użyć refleksji ... Z Refleksji można zbadać każdy członek klasy (typ A), proeprties, metod, contructors, pola itp ..

using System.Reflection; 

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

można użyć System.Reflection namespac e do zapytania o informacje o typie obiektu.

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 

Należy zauważyć, że nie zaleca się stosowania tego podejścia zamiast kolekcji w kodzie. Refleksja jest czynnością o dużej wydajności i powinna być używana mądrze.

+0

+1 Pomógł mi - dzięki – ppumkin

+0

@MehrdadAfshari Właśnie to, czego potrzebowałem, dzięki! :) – Chiramisu

+0

Miałem problem. to błąd: Odwołanie do obiektu nie jest ustawione na instancję obiektu. –

5

System.Reflection jest "wagi ciężkiej", zawsze wdrożyć lżejszą pierwszą metodę ..

// 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 
Powiązane problemy