2009-06-07 12 views
8

मैं जो स्ट्रिंग की सूची के साथ से भर जाता है निम्नलिखित सामान्य सूची है:foreach का उपयोग कर जेनेरिक सूची में आइटम्स को कैसे संशोधित करें?

List<string> mylist =new List<string>(); 
myList.add("string1"); 
myList.add("string2"); 

मैं प्रत्येक स्ट्रिंग के अंत में 'परीक्षण' जोड़ना चाहते हैं कहो, मैं इसे कैसे एक सरल तरीके से कर सकते हैं?

myList.ForEach(s => s = s + "test"); 

लेकिन अगर मैं तो सूची की सामग्री को देखो, कुछ भी नहीं बदला है: intuitively, मैं इस जो ठीक संकलित की कोशिश की। मुझे लगता है कि मैं सूची के माध्यम से पुनरावृत्ति करने के लिए लूप का उपयोग कर सकता हूं लेकिन मैं कुछ बहुत सरल खोज रहा हूं और फॉरएच का उपयोग बहुत साफ दिखता है .... लेकिन काम नहीं लगता है। कोई विचार?

उत्तर

14
समस्या

कि Action आप के तत्वों पर निष्पादित हो जाता है निर्दिष्ट है सूची, लेकिन परिणाम कहीं भी वापस नहीं रखा गया है ... आपका s केवल स्थानीय चर है।

में जगह शायद एक वास्तविक foreach लगेगा सूची बदलने, लेकिन अगर आप परिणाम के रूप में एक नई सूची लेने के लिए खुश हैं, तो आप की कोशिश कर सकते:

list = list.ConvertAll(s => s + "test"); 

नहीं काफी एक ही है ... लेकिन जितना करीब आप पाएंगे ...

+1

वैकल्पिक IENumerable के रूप में। चयन करें (एस => एस + "परीक्षण") ... –

9

ऐसा करना संभव नहीं है जब तक कि सूची प्रकार एक परिवर्तनीय संदर्भ प्रकार न हो (और उस स्थिति में, आप अभी भी सूची में वास्तविक संदर्भ नहीं बदल सकते हैं लेकिन ऑब्जेक्ट स्वयं)।

delegate void Action<T>(T obj); 

और यहाँ, तर्क है मूल्य द्वारा पारित (यह ref नहीं है):

कारण यह है कि कॉल हस्ताक्षर के साथ एक Action<T> प्रतिनिधि है। किसी भी विधि की तरह, आप इनपुट तर्क जब यह मान द्वारा कहा जाता है नहीं बदल सकते:

कोड को अनिवार्य रूप से बराबर है:

void anonymous_method(string s) { 
    s = s + "test"; // no way to change the original `s` inside this method. 
} 

list.ForEach(anonymous_method); 
+0

स्पष्टीकरण के लिए धन्यवाद। बहुत उपयोगी। – Anthony

+1

मैं स्पष्टीकरण के लिए भी आपको धन्यवाद देता हूं ... यह मैंने देखा है कि यह सबसे सरल स्ट्राइग-अप स्पष्टीकरण है ... एमएसडीएन पर कुछ भी और सब कुछ धड़कता है। टा। – corlettk

+0

हां, मुझे यह जवाब पसंद है, बहुत साफ और सहज ज्ञान युक्त – Vincent