2008-11-24 15 views
34

मैं अपने कस्टम ऑब्जेक्ट में प्रत्येक गुण के माध्यम से कैसे जा सकता हूं? यह संग्रह वस्तु नहीं है, लेकिन क्या ऐसा कुछ गैर संग्रह वस्तुओं के लिए है?कस्टम vb.net ऑब्जेक्ट की प्रत्येक प्रॉपर्टी के माध्यम से कैसे पुनरावृत्ति करें?

For Each entry as String in myObject 
    ' Do stuff here... 
Next 

मेरे ऑब्जेक्ट में स्ट्रिंग, पूर्णांक और बूलियन गुण हैं।

उत्तर

59

प्रतिबिंब का उपयोग करके आप ऐसा कर सकते हैं। सी # में ऐसा लगता है;

PropertyInfo[] propertyInfo = myobject.GetType().GetProperties(); 

जोड़ा एक VB.Net अनुवाद:

Dim info() As PropertyInfo = myobject.GetType().GetProperties() 
+0

कहां है प्रत्येक प्रविष्टि के अंदर मूल्य? – Anders

+0

propertyInfo.GetValue() नामक एक विधि है। –

+0

यह 'प्रत्येक के लिए' लूप के संदर्भ में कैसे काम करता है? – tmsimont

1

आप प्रतिबिंब का उपयोग कर सकते हैं ... प्रतिबिंब के साथ आप एक वर्ग के हर सदस्य (एक प्रकार) की जांच कर सकते हैं, proeprties, तरीकों, contructors, खेतों, आदि ..

using System.Reflection; 

Type type = job.GetType(); 
    foreach (MemberInfo memInfo in type.GetMembers()) 
     if (memInfo is PropertyInfo) 
     { 
      // Do Something 
     } 
41

आप System.Reflection namespac उपयोग कर सकते हैं ई ऑब्जेक्ट प्रकार के बारे में जानकारी पूछने के लिए।

For Each p As System.Reflection.PropertyInfo In obj.GetType().GetProperties() 
    If p.CanRead Then 
     Console.WriteLine("{0}: {1}", p.Name, p.GetValue(obj, Nothing)) 
    End If 
Next 

कृपया ध्यान दें कि आपके कोड में संग्रह के बजाय इस दृष्टिकोण का उपयोग करने का सुझाव नहीं दिया गया है। प्रतिबिंब एक प्रदर्शन गहन चीज है और बुद्धिमानी से इस्तेमाल किया जाना चाहिए।

+0

+1 मेरी मदद की - धन्यवाद – ppumkin

+0

@MehrdadAfshari बस मुझे जो चाहिए, धन्यवाद! :) – Chiramisu

+0

मुझे एक समस्या थी। यह त्रुटि है: ऑब्जेक्ट संदर्भ किसी ऑब्जेक्ट के उदाहरण पर सेट नहीं है। –

5

System.Reflection "भारी वजन", मैं हमेशा एक लाइटर विधि पहले लागू ..

// सी #

है
if (item is IEnumerable) { 
    foreach (object o in item as IEnumerable) { 
      //do function 
    } 
} else { 
    foreach (System.Reflection.PropertyInfo p in obj.GetType().GetProperties())  { 
     if (p.CanRead) { 
      Console.WriteLine("{0}: {1}", p.Name, p.GetValue(obj, null)); //possible function 
     } 
    } 
} 

'VB.Net

If TypeOf item Is IEnumerable Then 

    For Each o As Object In TryCast(item, IEnumerable) 
       'Do Function 
    Next 
    Else 
    For Each p As System.Reflection.PropertyInfo In obj.GetType().GetProperties() 
     If p.CanRead Then 
       Console.WriteLine("{0}: {1}", p.Name, p.GetValue(obj, Nothing)) 'possible function 
      End If 
     Next 
    End If 
संबंधित मुद्दे