2011-02-10 16 views

उत्तर

6

मैं PropertyInfo.GetIndexParameters का उपयोग करना पसंद:

var indexers = targetType.GetProperties(bindingFlags) 
         .Where(p => p.GetIndexParameters().Any()); 
         .Select(p => p.GetGetMethod()); 

अब indexers indexers कि निर्दिष्ट BindingFlagsbindingFlags में दिए गए मेल खाते की ही टिककर खेल का एक IEnumerable<MethodInfo> है।

नोट करें कि कोड targetType से कैसे पढ़ता है, bindingFlags से मेल खाने वाले गुण प्राप्त करें, जो इंडेक्सर हैं, और फिर गेटटर को प्रोजेक्ट करें। यह जादू स्ट्रिंग "get_Item" का उपयोग करने से बहुत कम रहस्यमय है, और एकाधिक इंडेक्सर्स आसानी से संभाले जाते हैं।

यदि आपको पता है कि केवल एक ही है, तो आप निश्चित रूप से Single का उपयोग कर सकते हैं। यदि आप कई में से एक विशिष्ट खोज रहे हैं, तो आप तदनुसार GetIndexParameters के परिणाम का निरीक्षण कर सकते हैं।

+0

मैं MethodInfo चाहता हूं, PropertyInfo नहीं। – smartcaveman

+0

@smartcaveman: वाह। मैंने जो आपको ऊपर दिया है उस पर 'PropertyInfo.GetGetMethod' का उपयोग करें। – jason

2

कक्षा के लिए DefaultItemAttribute को पुनर्प्राप्त करने का उचित तरीका है। यह सूचकांक संपत्ति का नाम है। इसे "आइटम" नहीं होना चाहिए, वीबीएनईटी जैसी भाषाएं किसी भी संपत्ति को इंडेक्सर निर्दिष्ट करने की अनुमति देती हैं। जेसन का कोड भी उन पर असफल होगा, एक से अधिक अनुक्रमित संपत्ति हो सकती है। लेकिन केवल एक डिफ़ॉल्ट।

+0

क्या आपके पास इसके लिए कोई दस्तावेज है? मेरे द्वारा इसे कहीं भी ढूंढा जा सकता है। – smartcaveman

+0

एमएसडीएन, वीबी.नेट डिफ़ॉल्ट कीवर्ड और DefaultMemberAttribute क्लास को देखें। –

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