2010-01-13 19 views
5

Estoy tratando de recuperar las propiedades públicas de un objeto pero no devuelve nada. ¿Puedes decirme qué estoy haciendo mal?¿Por qué GetFields() no devuelve nada?

public class AdHocCallReportViewModel : ReportViewModel 
{ 
    public string OperatorForCustEquipID { get; set; } 
    public string OperatorForPriorityID { get; set; } 
    public string OperatorForCallTypeID { get; set; } 
    public string OperatorForStatusID { get; set; } 
} 

public UpdateReportParameters(AdHocCallReportViewModel rvm) 
{ 
    var type = rvm.GetType(); 
    foreach (var f in type.GetFields().Where(f => f.IsPublic)) 
    { 
     Console.WriteLine(f.Name); 
     Console.WriteLine(f.GetValue(rvm).ToString()); 
    } 
} 

Al recorrer el código, se salta el bucle foreach porque GetFields devuelva cero artículos.

Respuesta

23

No tienes. Ellos son propiedades. Así que intente type.GetProperties() en su lugar.

+0

duplicado de mi respuesta así que tome un +1 =) – Restuta

+0

Esto es deshonestamente que el autor aceptó su respuesta, mi respuesta fue dada primero y es la misma. :( – Restuta

+4

Sucede mucho con preguntas triviales y respuestas como esta que se envían a veces en cuestión de segundos. No tiene nada que ver con la deshonestidad. A veces eres el error, a veces eres el escudo de viento. –

1

Pase BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public para obtener todos los campos de instancia.

Pensándolo bien, veo que estás filtrando explícitamente para los campos públicos. La clase no tiene ningún campo público. Los campos que el compilador genera automáticamente como almacén de respaldo para las propiedades son privados.

+0

о_О ¿por qué ha tomado esto si necesita obtener PROPIEDADES públicas, no campos? – Restuta

+0

Restuta: No haría esto si quisiera propiedades * públicas *. No está claro qué intenta hacer el OP. Como usó 'GetFields', supongo que estaba buscando los campos. De todos modos, se debe señalar que el objeto * sí tiene campos * pero son privados. –

+0

Pero como la clase implementada por el OP tiene solo propiedades, es más probable suponer que está buscando las propiedades, también porque parece estar buscando las públicas. –

8

Usted está tratando de obtener campos, usted debe tratar de llamar a los campos públicos GetProperties()

Cuestiones relacionadas