2009-08-07 5 views
6

मैं इस तरह एक वर्ग है:Type.GetProperties विधि

class ItemList 
{ 
    Int64 Count { get; set; } 
} 

और जब मैं यह लिख:

ItemList list = new ItemList (); 

Type type = list.GetType (); 
PropertyInfo [ ] props = type.GetProperties (); 

मैं रंगमंच की सामग्री के लिए एक खाली सरणी मिलता है।

क्यों? क्या ऐसा इसलिए है क्योंकि GetProperties में स्वचालित गुण शामिल नहीं हैं?

+6

'सभी के लिए कि Google से आते हैं:' आप अभी भी अपने "properties" निशानी लगाने के बाद भी नहीं मिल सकता है, अगर आप सी # के लिए नए हैं और पता नहीं है 'गुण' और' फ़ील्ड्स 'के बीच अंतर,' GetFields() 'का उपयोग करने का प्रयास करें। आप शायद 'फ़ील्ड' की तलाश कर रहे हैं! – user1306322

उत्तर

18

समस्या यह है कि GetProperties केवल डिफ़ॉल्ट रूप से सार्वजनिक गुणों को वापस कर देगा। सी # में, सदस्य डिफ़ॉल्ट रूप से सार्वजनिक नहीं होते हैं (मुझे विश्वास है कि वे आंतरिक हैं)। इसे

var props = type.GetProperties(BindingFlags.Instance | BindingFlags.NonPublic); 

बाइंडिंगफ्लैग गणना काफी लचीला है। उपर्युक्त संयोजन इस प्रकार के सभी गैर-सार्वजनिक उदाहरण गुणों को वापस कर देगा। आप जो भी चाहते हैं वह एक्सेसिबिलिटी के बावजूद सभी इंस्टेंस गुण हैं। उस मामले में कोशिश निम्नलिखित

var flags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; 
var props = type.GetProperties(flags); 
+0

धन्यवाद, इसका एहसास नहीं हुआ। इसके अलावा आप एक तर्क के लिए कई विकल्प प्रदान करने में सक्षम कैसे हैं? क्या बाध्यकारीफ्लैग बिट्स हैं जिन्हें आप बदलते हैं? –

+1

@ जोन, हाँ। बाइंडिंगफ्लैग एक गणना है जो बिट फ्लैग का उपयोग करती है जिसका आप उपयोग कर सकते हैं। यह कई तर्क प्रदान नहीं कर रहा है, केवल एक गणना मूल्य बना रहा है जिसमें विभिन्न बिट संयोजन सेट हैं। – JaredPar

+1

जोन: बाध्यकारी झंडे एक झंडे enum हैं, तो आप का उपयोग कर सकते हैं | समारोह में एकाधिक झंडे पारित करने के लिए। –

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