WinRT

2012-11-02 14 views
13

में कक्षा के गुण कैसे प्राप्त करें मैं सी # और एक्सएएमएल में विंडोज 8 एप्लीकेशन लिख रहा हूं। मेरे पास एक ही प्रकार के कई गुणों के साथ एक वर्ग है जो कि कन्स्ट्रक्टर में उसी तरह सेट है। हाथों में से प्रत्येक संपत्ति के लिए लेखन और असाइनमेंट के बजाय मैं अपनी कक्षा में कुछ प्रकार के सभी गुणों की एक सूची प्राप्त करना चाहता हूं और उन्हें सभी को एक foreach में सेट करना चाहता हूं।WinRT

"सामान्य" नेट में मैं ने लिखा है इस

var properties = this.GetType().GetProperties(); 
foreach (var property in properties) 
{ 
    if (property.PropertyType == typeof(Tuple<string,string>)) 
    property.SetValue(this, j.GetTuple(property.Name)); 
} 

जहां j मेरे निर्माता की एक पैरामीटर है। WinRT में GetProperties() मौजूद नहीं है। this.GetType(). के लिए इंटेलिजेंस कुछ भी उपयोगी नहीं दिखाता है जिसका मैं उपयोग कर सकता हूं।

var properties = this.GetType().GetRuntimeProperties(); 
// or, if you want only the properties declared in this class: 
// var properties = this.GetType().GetTypeInfo().DeclaredProperties; 
foreach (var property in properties) 
{ 
    if (property.PropertyType == typeof(Tuple<string,string>)) 
    property.SetValue(this, j.GetTuple(property.Name)); 
} 
+2

http://msdn.microsoft.com/en-us/library/windows/apps/br230302.aspx#reflection –

उत्तर

16

आप GetProperties के बजाय GetRuntimeProperties उपयोग करने की आवश्यकता

var props = obj.GetType().GetTypeInfo().GetAllProperties(); 

अपडेट: इस विस्तार उपयोग विधि केवल GetRuntimeProperties उपलब्ध नहीं है क्योंकि GetRuntimeProperties वही करता है लेकिन एक अंतर्निहित विधि है।

+2

त्रुटि: 'System.Type' में 'GetTypeInfo' –

+3

की परिभाषा नहीं है यह एक विस्तार विधि है , आपको 'System.Reflection' नेमस्पेस –

+0

आयात करने की आवश्यकता है' सिस्टम। रिफ्लेक्शन 'आयात करने के बाद मुझे' System.Reflection.TypeInfo 'में' GetProperties 'की परिभाषा नहीं है। किसी भी अन्य आयात की जरूरत है? –

6

इस प्रयास करें::

public static IEnumerable<PropertyInfo> GetAllProperties(this TypeInfo type) 
{ 
    var list = type.DeclaredProperties.ToList(); 

    var subtype = type.BaseType; 
    if (subtype != null) 
     list.AddRange(subtype.GetTypeInfo().GetAllProperties()); 

    return list.ToArray(); 
} 

और इस तरह इसका इस्तेमाल:

+0

मुझे उम्मीद है कि यह फ़ंक्शन 'TypeInfo' कक्षा में ही जोड़ा जा सकता है। – hardywang

 संबंधित मुद्दे