प्राप्त करने के लिए, मेरे पास है: targetType.GetMethod("get_Item", BindingFlags.Instance)
तरह से अनुकूलित अभी "get_Item" MethodInfo
क्या बेहतर है?
प्राप्त करने के लिए, मेरे पास है: targetType.GetMethod("get_Item", BindingFlags.Instance)
तरह से अनुकूलित अभी "get_Item" MethodInfo
क्या बेहतर है?
मैं PropertyInfo.GetIndexParameters
का उपयोग करना पसंद:
var indexers = targetType.GetProperties(bindingFlags)
.Where(p => p.GetIndexParameters().Any());
.Select(p => p.GetGetMethod());
अब indexers
indexers कि निर्दिष्ट BindingFlags
bindingFlags
में दिए गए मेल खाते की ही टिककर खेल का एक IEnumerable<MethodInfo>
है।
नोट करें कि कोड targetType
से कैसे पढ़ता है, bindingFlags
से मेल खाने वाले गुण प्राप्त करें, जो इंडेक्सर हैं, और फिर गेटटर को प्रोजेक्ट करें। यह जादू स्ट्रिंग "get_Item"
का उपयोग करने से बहुत कम रहस्यमय है, और एकाधिक इंडेक्सर्स आसानी से संभाले जाते हैं।
यदि आपको पता है कि केवल एक ही है, तो आप निश्चित रूप से Single
का उपयोग कर सकते हैं। यदि आप कई में से एक विशिष्ट खोज रहे हैं, तो आप तदनुसार GetIndexParameters
के परिणाम का निरीक्षण कर सकते हैं।
कक्षा के लिए DefaultItemAttribute को पुनर्प्राप्त करने का उचित तरीका है। यह सूचकांक संपत्ति का नाम है। इसे "आइटम" नहीं होना चाहिए, वीबीएनईटी जैसी भाषाएं किसी भी संपत्ति को इंडेक्सर निर्दिष्ट करने की अनुमति देती हैं। जेसन का कोड भी उन पर असफल होगा, एक से अधिक अनुक्रमित संपत्ति हो सकती है। लेकिन केवल एक डिफ़ॉल्ट।
क्या आपके पास इसके लिए कोई दस्तावेज है? मेरे द्वारा इसे कहीं भी ढूंढा जा सकता है। – smartcaveman
एमएसडीएन, वीबी.नेट डिफ़ॉल्ट कीवर्ड और DefaultMemberAttribute क्लास को देखें। –
मैं MethodInfo चाहता हूं, PropertyInfo नहीं। – smartcaveman
@smartcaveman: वाह। मैंने जो आपको ऊपर दिया है उस पर 'PropertyInfo.GetGetMethod' का उपयोग करें। – jason