2012-10-17 11 views
5

क्या कोई ऐसा फ़ंक्शन है जो आपको List<T> पर कोई तत्व जोड़ने की अनुमति देता है और सूचकांक को int वापस प्राप्त करता है? List<T>.Add() एक void है और कोई मान नहीं लौटाता है।सूची <T> पर तत्व कैसे जोड़ें और अनुक्रमणिका को वापस प्राप्त करें?

List.Count-1 एक समाधान है जब आप धागे के साथ काम नहीं कर रहे हैं। मेरी सूची एक स्थिर सदस्य है और एक समय में एकाधिक धागे के साथ पहुंचा जा सकता है और गिनती -1 मान का उपयोग पूरी तरह से थ्रेड असुरक्षित है और आसानी से गलत परिणामों का कारण बन सकता है।

सूचकांक प्रत्येक तत्व के लिए विशिष्ट उपचार के लिए उपयोग किया जाएगा।

धन्यवाद!

+2

सवाल है, 'सूची है।' धागा सुरक्षित जोड़ें? –

+2

क्या आप इसके बजाय एक समवर्ती संग्रह का उपयोग कर रहे हैं? – CookieOfFortune

उत्तर

10

सूची के तरीके अकेले सुरक्षित नहीं हैं; यदि आप कई धागे से बार-बार List.Add पर कॉल करते हैं तो आप समस्याओं में बहुत अच्छी तरह से चल सकते हैं। यदि आप पहले स्थान पर List का उपयोग करने जा रहे हैं, तो आपको किसी प्रकार की सिंक्रनाइज़ेशन तकनीक का उपयोग करने की आवश्यकता है, ताकि आप उस महत्वपूर्ण अनुभाग के अंदर List.Count पर कॉल भी शामिल कर सकें।

आपका दूसरा विकल्प एक संग्रह का उपयोग करना होगा जिसे कई धागे, जैसे कि System.Collections.Concurrent में उपयोग करने के लिए डिज़ाइन किया गया है।

+2

+1 का उपयोग करना है - लेकिन केवल एक नोट है कि 'System.Collections.Concurrent' केवल उपलब्ध है .NET 4.0 – keyboardP

+0

@keyboardP हाँ, यही कारण है कि मैंने इसे केवल एक विकल्प के रूप में सूचीबद्ध किया है। – Servy

+0

ठीक है, .NET 4.0 में अपग्रेड करना एक आसान नहीं है। लेकिन समाधान स्वीकृति के लायक है –

0

यदि आप थ्रेड सुरक्षित इंडेक्स चाहते हैं तो आपको लॉकिंग की आवश्यकता है क्योंकि लोग इंडेक्स होने पर भी एक आइटम हटा सकते हैं/सूची बदल सकते हैं।

जिसके अनुसार, आप list.IndexOf (मान) की कोशिश कर सकते हैं जो मूल्य के सूचकांक रिटर्न (यह मानते हुए सभी तत्वों अद्वितीय हैं)

-2

मेरा मानना ​​है कि सूची एक indexOf() विधि है, ताकि आप इसे कॉल कर सकते हैं इस तरह की सूची में तत्व जोड़ने के बाद:

list.add(element); 
int index = list.indexOf(element); 
+3

मान लीजिए कि आइटम कई बार सूची में नहीं है .. – Servy

+1

इंडेक्सऑफ() ओ के बड़े ओ का उल्लेख नहीं है ओ (एन) है। – CookieOfFortune

+1

जब आपका तत्व संग्रह होता है, तो इस तरह के विधि (संग्रह के आकार के संबंध में) का उपयोग करना वास्तव में बुद्धिमान नहीं है, विशेष रूप से यदि थ्रेड –

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