2011-10-22 79 views
23

我試圖將一個簡單的應用程序移植到Windows 8 Metro(WinRT)。似乎缺少一些非常基本的方法。一個基本的例子:Type.GetProperty()。它適用於Windows Phone 7,Silverlight和.NET客戶端配置文件。我是否必須安裝某些東西(例如特殊的庫),或者這種方法在.NET metro配置文件中根本不可用?Windows 8開發者預覽中缺少Type.GetProperty()方法

UPDATE

好的,謝謝。現在我使用this.GetType().GetTypeInfo().DeclaredProperties

using System.Reflection;需要有此GetTypeInfo()擴展方法。

+0

旁註:將現有的WP7應用程序移植到地鐵並不那麼簡單。不僅有命名空間的變化......(Reflection,Streams,Dispatcher,...) –

回答

24

地鐵中的反射已經發生了一些變化:請參見MSDN(「反射變化」 - 接近底部)。

基本上,您現在需要:type.GetTypeInfo()

12

除了Nicholas Butler的迴應,我最終還是使用這種擴展來保持代碼在所有平臺中的可重用性。

#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 

這樣,Type.GetProperty()爲所有平臺上實現。

+0

當然,這是一箇舊線程,但我想補充說GetDeclaredPropert(y/ies)只會返回當前類型的屬性。這意味着如果Class2派生自Class1,則GetDerivedProperties將僅返回來自Class2的屬性。 – Falgantil

+0

@BjarkeSøgaard如果你想搜索所有的屬性,你可以使用'type.GetRuntimeProperty(propertyName)' – redent84

+0

其實我最終只是這樣做的:for(; type!= null; type = type.GetTypeInfo()。BaseType) – Falgantil