2009-12-22 15 views
8

में कनवर्ट करें। मेरे पास तारों की एक सूची है। सभी तारों में व्हाइटस्पेस होता है जिसे अंडरस्कोर में परिवर्तित करने की आवश्यकता होती है। मैं ऐसा करने के लिए for या foreach लूप का उपयोग करने में पूरी तरह से सक्षम हूं। मैं अभी भी सी # के लिए अपेक्षाकृत नया हूं और इसके साथ और अधिक परिचित होना चाहता हूं। इसके साथ, मेरा सवाल है:सी # सूची <T>। .NET 2.0

मैं .NET 2.0 में काम करने के लिए निम्न कोड कैसे प्राप्त कर सकता हूं? जब मैं ConvertAll ऑपरेशन के अंत में fieldList जांचता हूं, तो कुछ भी नहीं बदला है। संदर्भ के बजाय मूल्य से स्ट्रिंग को पारित करने में कोई समस्या है?

string fields = 
    "First Name,Middle Name,Last Name,Birth Date,Gender,Address,City,State,Zip,Email"; 
List<string> fieldList = new List<string>(fields.Split(',')); 
fieldList.ConvertAll<string>(new Converter<string, string>(
    delegate(string str) 
    { 
     str = str.Trim(); 
     str = str.Replace(' ', '_'); 
     return str; 
    } 
)); 

कृपया, कि मैं .NET 2.0 का उपयोग कर रहा है और वर्तमान में परिवर्तन नहीं कर सकते, यह ध्यान रखें, तो मैं LINQ या lambdas का उपयोग कर के लक्जरी नहीं है।

उत्तर

13

आप इस तरह चर को ConvertAll विधि के परिणाम आवंटित करने के लिए की जरूरत है:

fieldList = fieldList.ConvertAll<string>(new Converter<string, string>(
    delegate(string str) 
    { 
     str = str.Trim(); 
     str = str.Replace(' ', '_'); 
     return str; 
    } 
)); 

ConvertAll विधि देता है एक नया List<T> ताकि आप विधि का परिणाम सौंपने होंगे। आप चाहते हैं fieldList चर आप कर सकते हैं फिर से उपयोग, लेकिन यह अपने कोड की स्पष्टता में सुधार करने के लिए एक नया चर बनाने के लिए बेहतर हो सकता है:

List<String> convertedFieldList 
    = fieldList.ConvertAll<string>(new Converter<string, string>(
     delegate(string str) 
     { 
      str = str.Trim(); 
      str = str.Replace(' ', '_'); 
      return str; 
     } 
)); 

मार्क Gravell नीचे एक टिप्पणी में बताते हैं के रूप में, आप सरल बना सकते हैं ऐसा करने से यह अभिव्यक्ति की वाक्य रचना:

List<String> convertedFieldList 
    = fieldList.ConvertAll<String>(delegate(String str) { 
      return str.Trim().Replace(' ', '_'); 
     }); 
+7

बस पूर्णता के लिए, आप '... ConvertAll (प्रतिनिधि (स्ट्रिंग str) {...}) को आसान बनाने में कर सकते हैं,' –

+0

@Marc - अच्छा बताते :) –

+0

मैं यह त्रुटि आई: प्रकार विधि 'System.Collections.Generic.List.ConvertAll (System.Converter)' के लिए तर्क उपयोग से अनुमानित नहीं किए जा सकते हैं। प्रकार तर्कों को स्पष्ट रूप से निर्दिष्ट करने का प्रयास करें। – kzh

3

ConvertAll इनपुट सूची नहीं बदलता है। यह परिवर्तित सामग्री युक्त एक नई सूची देता है। वैसे, आप के साथ सी # 2.0+ new Converter<string,string> निकाल सकते हैं:

List<string> converted = fieldList.ConvertAll<string> 
    (delegate(string s) { return s.Trim().Replace(' ', '_'); }); 

इसके अलावा, कुछ भी नहीं है आप एक सी # 3.0 संकलक का उपयोग करने और LINQBridge और .NET 2.0 को लक्षित करने से रोकता है।

+0

किसी कारण से, सी # 2.0 नई कनवर्टर घोषणा के बिना प्रकार का अनुमान नहीं लगा सका। – kzh