2010-12-20 15 views
6

के लिए संदर्भ का संग्रह इन गुणों पर विचार करें,सूची/गुण

 double _temperature; 
     public double Temperature 
     { 
      get { return _temperature; } 
      set { _temperature = value; } 
     } 
     double _humidity; 
     public double Humidity 
     { 
      get { return _humidity; } 
      set { _humidity = value; } 
     } 
     bool _isRaining; 
     public bool IsRaining 
     { 
      get { return _isRaining; } 
      set { _isRaining = value; } 
     } 

और अब मैं एक सूची/संग्रह/इस तरह के गुण के कंटेनर बनाना चाहते,

PropertyContainer.Add(Temperature); //Line1 
PropertyContainer.Add(Humidity);  //Line2 
PropertyContainer.Add(IsRaining); //Line3 

मैं इस बनाना चाहते जैसे कि बाद में मैं वर्तमानइंडेक्स का उपयोग कर गुणों के मूल्यों तक पहुंचने में सक्षम हो सकता हूं, इस तरह कुछ,

मूल्य जो Temperature कंटेनर के लिए Temperature जोड़ने के दौरान ( Line1 ऊपर देखें) पर था -
object currentTemperature = PropertyContainer[0]; 
object currentHumidity = PropertyContainer[1]; 
object currentIsRaining = PropertyContainer[2]; 

लेकिन जाहिर है, इस पुराने मान प्रदान करेंगे काम करने के लिए नहीं जा रहा है, के बाद से PropertyContainer[0]

क्या इस समस्या का कोई समाधान है? असल में मैं वर्तमान गुणों के मान समान रूप से तक पहुंच बनाना चाहता हूं; एकमात्र चीज जो बदल सकती है, सूचकांक है। सूचकांक हालांकि स्ट्रिंग भी हो सकता है।

पीएस: मैं प्रतिबिंब का उपयोग नहीं करना चाहता!

उत्तर

9

ठीक है, आप lambdas इस्तेमाल कर सकते हैं:

List<Func<object>> PropertyAccessors = new List<Func<object>>(); 
PropertyAccessors.Add(() => this.Temperature); 
PropertyAccessors.Add(() => this.Humidity); 
PropertyAccessors.Add(() => this.IsRaining); 

तो आप कर सकते थे इस लिए:

object currentTemperature = PropertyAccessors[0](); 
+0

इस भयानक समाधान है। प्रश्न पोस्ट करने के बाद, मुझे [अन्य विषय] से एक ही समाधान मिला (http://stackoverflow.com/questions/1402803/c-passing-properties-by-reference)। इस भयानक चाल के साथ त्वरित प्रतिक्रिया के लिए बहुत बहुत धन्यवाद! – Nawaz

+1

यदि आप मदद करते हैं तो आप इसे उत्तर के रूप में चिह्नित कर सकते हैं। :) – Botz3000

+1

ओह, मैं इसे भूल गया। असल में यह मुझे 5 मिनट इंतजार करने के लिए कह रहा था, भगवान जानता है क्यों। वैसे भी, जवाब स्वीकार किया गया है और मुझसे +1। – Nawaz