2011-10-22 15 views
23

Estoy tratando de portar una aplicación simple a Windows 8 Metro (WinRT). Parece que faltan algunos métodos muy básicos. Un ejemplo básico: Type.GetProperty(). Está disponible para Windows Phone 7, Silverlight y el perfil de cliente .NET. ¿Tengo que instalar algo (por ejemplo, una biblioteca especial) o este método simplemente no está disponible en el perfil metropolitano de .NET?Falta el método Type.GetProperty() en Windows 8 Developer Preview

ACTUALIZACIÓN

bien, gracias. Ahora uso this.GetType().GetTypeInfo().DeclaredProperties.

using System.Reflection; es necesario tener este método de extensión GetTypeInfo().

+0

Nota: No es tan simple trasladar una aplicación WP7 existente al metro. No solo hay cambios en el espacio de nombres ... (Reflection, Streams, Dispatcher, ...) –

Respuesta

24

La reflexión ha cambiado un poco en Metro: vea MSDN ("Cambios de reflexión" - cerca de la parte inferior).

Básicamente, ahora necesita: type.GetTypeInfo().

12

Además de la respuesta de Nicholas Butler, terminé usando este tipo de extensiones para mantener el código reutilizable en todas las plataformas.

#if NETFX_CORE // Workaround for .Net for Windows Store not having Type.GetProperty method 
    public static class GetPropertyHelper 
    { 
     public static PropertyInfo GetProperty(this Type type, string propertyName) 
     { 
      return type.GetTypeInfo().GetDeclaredProperty(propertyName); 
     } 
    } 
#endif 

De esta manera, Type.GetProperty() se implementa para todas las plataformas.

+0

De acuerdo, este es un hilo antiguo, pero me gustaría añadir que GetDeclaredPropert (y/ies) solo devolverá propiedades en el tipo actual. Lo que significa que si Class2 deriva de Class1, GetDerivedProperties solo devolverá propiedades de Class2. – Falgantil

+0

@ BjarkeSøgaard si desea buscar en todas las propiedades puede usar 'type.GetRuntimeProperty (propertyName)' – redent84

+0

En realidad terminé haciendo esto: para (; tipo! = Null; tipo = tipo.GetTypeInfo(). BaseType) – Falgantil