2012-11-06 12 views
6

मैं एक साधारण वर्ग है:उपयोग स्ट्रिंग इंडेक्सर

public class MyClass 
{ 
    public string MyClassName { get; private set; } 
    public string MyClassValue { get; private set; } 
} 

और मैं MyClass की एक सरणी इस तरह की वस्तुओं रखना चाहते हैं:

MyClass[] myClasses = new MyClass[5]; 

क्या यह संभव है, बनाने के बिना एक " संग्रह "ऑब्जेक्ट, स्ट्रिंग इंडेक्सर द्वारा ऑब्जेक्ट्स की सरणी में उन ऑब्जेक्ट्स में से किसी एक को एक्सेस करने में सक्षम होने के लिए (क्या यह सही शब्दावली है)?

उदाहरण के लिए, myClasses [2] मूल्य "andegre" MyClassName संपत्ति में अधिक हो, तो कैसे/मैं इसे इस तरह उपयोग कर सकते हैं:

MyClass andegre = myClasses[GetIndexOfOfMyClassName("andegre")]; 
:

MyClass andegre = myClasses["andegre"]; 

इसके बजाय की तरह कुछ करने का

टीआईए

+1

आप वास्तव में एक और बनाने चाहिए

आप क्या चाहते हैं, तो आप एक शब्दकोश की तरह कुछ, उदाहरण के लिए की आवश्यकता होगी प्राप्त करने के लिए वर्ग [MyClassCollection' उस [इंडेक्सर] के साथ (http://msdn.microsoft.com/en-us/library/2549tw02.aspx)। –

+0

एक शब्दकोश का उपयोग करने पर विचार करें? – Hardrada

उत्तर

1

LINQ की दुनिया में आपका स्वागत है!

MyClass andegre = 
    myClasses.FirstOrDefault(item => item.MyClassValue.Equals("andegre")); 
+0

आह, मैंने LINQ का बिल्कुल उपयोग नहीं किया है, शायद यह समय है .... धन्यवाद! – ganders

3

एक कस्टम इंडेक्सर एक मौजूदा संग्रह पर काम करने के लिए, कि संग्रह जो हो सकता है जो कुछ भी तर्क आप आप इसके पीछे चाहते हैं जो कुछ भी तर्क के साथ ले जाना चाहते indexer आप द्वारा कार्यान्वित के साथ एक कस्टम संग्रह, की आवश्यकता होगी । कस्टम प्रकार पर स्ट्रिंग लेने वाला कस्टम इंडेक्सर पूरी तरह से संभव है।

MyClass[] (जैसा कि, मूल .NET सरणी) का उपयोग कर रहे हैं, तो इंडेक्सर का उपयोग करने के लिए कोई तरीका नहीं है, आपको केवल सामान्य सूचकांक मिलता है।

वैकल्पिक रूप से, इच्छित डेटा के लिए पूछताछ के लिए आप LINQ से ऑब्जेक्ट्स (जिसे केवल LINQ के रूप में संदर्भित किया जाता है) का उपयोग कर सकते हैं क्योंकि अन्य उत्तरों ने सुझाव दिया है।

3

MyClass[] myClasses एक सरणी है (वास्तव में, वेक्टर)। Arrays/vectors में कोई स्ट्रिंग इंडेक्सर नहीं है - बस स्थितित्मक पहुंच।

var myClasses = new Dictionary<string,MyClass>(); 
myClasses.Add("Fred", new MyClass {...}); 
myClasses.Add("Betty", new MyClass {...}); 
myClasses.Add("Wilma", new MyClass {...}); 
// etc 

तो:

MyClass obj = myClasses["Fred"]; 

या:

MyClass obj; 
if(myClasses.TryGetValue("Fred", out obj)) { 
    // found Fred - use obj 
} else { 
    // no Fred here - don't look at obj 
} 
संबंधित मुद्दे