2008-11-24 18 views

Respuesta

59

Al utilizar la reflexión puede hacerlo. En C# se ve así;

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

añadió una traducción VB.Net:

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

¿Dónde está la valor dentro de cada entrada? – Anders

+0

Hay un método llamado propertyInfo.GetValue(). –

+0

¿Cómo funciona esto en el contexto de un bucle 'For Each'? – tmsimont

1

Usted puede utilizar la reflexión ... con la reflexión puede examinar todos los miembros de una clase (tipo A), proeprties, métodos, contructors, campos, etc ..

using System.Reflection; 

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

puede utilizar System.Reflection namespac e para consultar información sobre el tipo de objeto.

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 

Tenga en cuenta que no se sugiere utilizar este método en lugar de colecciones en el código. La reflexión es una actividad de alto rendimiento y debe usarse con prudencia.

+0

+1 Me ayudó - gracias – ppumkin

+0

@MehrdadAfshari Justo lo que necesitaba, ¡gracias! :) – Chiramisu

+0

Tuve un problema. es un error: la referencia del objeto no está configurada para una instancia de un objeto. –

5

System.Reflection es "peso pesado", que ha puesto en práctica un método más clara primero ..

// 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 
Cuestiones relacionadas