2013-02-15 21 views
11

में स्ट्रिंग मानों को ट्रिम करने के लिए प्रत्येक के लिए मैंने सोचा कि यह क्यों काम नहीं करता है और पिछली सफेद जगहों के साथ मूल्यों को छोड़ देता है।स्ट्रिंग सरणी

string days = "Monday, Tuesday, Wednesday, Thursday, Friday"; 

string[] m_days = days.Split(','); 

m_days.ToList().ForEach(d => { d = d.Trim(); }); 

मुझे पता है कि यह कर रहा तो मैं की जरूरत है और वहाँ का जवाब नहीं के अन्य तरीके हैं।

उत्तर

19

क्योंकि आप छंटनी की तार फिर नियत नहीं कर रहे हैं।

var list = m_days.Split(',').Select(s => s.Trim()).ToList(); 

क्यों ForEach काम नहीं करता है या अगर मैं ForEach गलत तरीके से उपयोग कर रहा हूँ?

ForEach लिंक नहीं है, यह List<T> का एक तरीका है। आप जो कर रहे हैं वह मूल रूप से यह है:

foreach(string day in m_days) 
{ 
    day.Trim(); // you are throwing away the new string 
} 
+0

ये मैं जानना चाहता हूं कि क्यों कोई काम नहीं करता है या अगर मैं गलत तरीके से फ़ॉरएच का उपयोग कर रहा हूं। मुझे पता है कि आप एक चयन कथन का उपयोग कर सकते हैं ... – David

+0

@ डेविड: कृपया इस बारे में एक स्पष्टीकरण के लिए मेरा उत्तर देखें कि आप इस कार्य के लिए 'ForEach' का उपयोग क्यों नहीं कर सकते। –

+1

@ डेविड: 'फॉरएच' लिंक नहीं है, यह 'सूची ' की एक विधि है। मेरा जवाब संपादित किया। –

4

आप एक नया चर करने के लिए अपने foreach के उत्पादन में आवंटित करने के लिए तो जैसे की जरूरत है:

var trimmedResult = m_days.Select(d => d.Trim()).ToList(); 
3

क्योंकि String.Trim() मूल स्ट्रिंग बदलाव न करें। जब आप ForEach(d => d.Trim()) पर कॉल करते हैं तो आप सूची के प्रत्येक आइटम के लिए स्मृति में नई ट्रिम किए गए स्ट्रिंग बनाते हैं, लेकिन उस स्ट्रिंग को कहीं भी असाइन नहीं किया जाता है। Thats तुम क्या कर रहे:

foreach(string d in list) 
{ 
    d.Trim(); 
} 

आपको क्या चाहिए

m_days = days.Split(',').Select(d => d.Trim()).ToArray(); 
+1

वाह। कोई स्ट्रिंग सोचता है। ट्रिम मूल स्ट्रिंग को संशोधित करता है? –

3

string.Trim रिटर्न एक नया स्ट्रिंग उदाहरण है। तो आपको किसी भी तरह का उपयोग करना होगा जो कि नया उदाहरण है।
आप अपने कोड में ऐसा नहीं कर रहे हैं।
इसके अलावा, ForEach के साथ यह संभव नहीं है। पहली नज़र में, निम्नलिखित काम कर सकता था:

m_days.ToList().ForEach(d => { d = d.Trim(); }); 

लेकिन वह नहीं आप मदद करने के लिए या तो, क्योंकि d संदर्भ द्वारा पारित नहीं है, जा रहा है ताकि आप केवल स्थानीय पैरामीटर है कि आपके प्रतिनिधि में पारित किया गया है बदल रहे हैं और सूची में संग्रहीत उदाहरण नहीं।

आप सबसे अधिक संभावना इस हैं:

var result = days.Split(',').Select(x => x.Trim()).ToList(); 

LINQ के बिना एक वैकल्पिक तरीका इस प्रकार दिखाई देगा:

var split = days.Split(','); 
for(int i = 0; i < split.Length; ++i) 
    split[i] = split[i].Trim(); 
+0

ने मुझे पोस्ट में हराया लेकिन यह सबसे अच्छा समाधान आईएमओ – JMan

+0

ठीक है, और विकल्प पोस्ट करने की आवश्यकता नहीं है। मैं विकल्पों को जानता हूँ। मुझे लगता है कि मैं फॉरएच के उपयोग को गलत समझ रहा हूं। मैं सिर्फ यह जानना चाहता था कि वास्तव में क्यों काम नहीं करता – David

+0

@ डेविड: ठीक है, यह पहले कोड स्निपेट के बाद भाग में मेरे उत्तर में समझाया गया है। –