2011-10-22 23 views
23

Tôi đang cố gắng chuyển một ứng dụng đơn giản sang Windows 8 Metro (WinRT). Có vẻ như một số phương pháp rất cơ bản bị thiếu. Một ví dụ cơ bản: Type.GetProperty(). Nó có sẵn cho Windows Phone 7, Silverlight và .NET client profile. Tôi có phải cài đặt một cái gì đó (ví dụ: một thư viện đặc biệt) hoặc là phương pháp này chỉ đơn giản là không có sẵn trong hồ sơ NET metro.Thiếu phương thức Type.GetProperty() trong Windows 8 Developer Preview

CẬP NHẬT

OK, cảm ơn bạn. Bây giờ tôi sử dụng this.GetType().GetTypeInfo().DeclaredProperties.

using System.Reflection; là cần thiết để có phương thức mở rộng này GetTypeInfo().

+0

Sidenote: Nó không phải là đơn giản để cổng một ứng dụng WP7 hiện có để tàu điện ngầm. Không chỉ thay đổi không gian tên ... (Reflection, Streams, Dispatcher, ...) –

Trả lời

24

Phản ánh đã thay đổi một chút trong Metro: xem MSDN ("Thay đổi phản chiếu" - gần cuối).

Về cơ bản, bây giờ bạn cần: type.GetTypeInfo().

12

Ngoài phản hồi của Nicholas Butler, tôi đã sử dụng loại tiện ích mở rộng này để duy trì mã có thể sử dụng lại trong tất cả các nền tảng.

#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 

Bằng cách này, Type.GetProperty() được triển khai cho tất cả các nền tảng.

+0

Cấp, đây là một chủ đề cũ, nhưng tôi muốn thêm rằng GetDeclaredPropert (y/ies) sẽ chỉ trả về các thuộc tính trên kiểu hiện hành. Có nghĩa là nếu Class2 xuất phát từ Class1, GetDerivedProperties sẽ chỉ trả về các thuộc tính từ Class2. – Falgantil

+0

@ BjarkeSøgaard nếu bạn muốn tìm kiếm trong tất cả các thuộc tính mà bạn có thể sử dụng 'type.GetRuntimeProperty (propertyName)' – redent84

+0

Thực ra tôi đã kết thúc việc này: for (; type! = Null; type = type.GetTypeInfo(). BaseType) – Falgantil

Các vấn đề liên quan