2010-07-26 21 views

उत्तर

19
var str = guids.Select(g => g.ToString()) 
       .Aggregate((working, next) => working + "," + next); 

एक बार GUIDs की अपनी सूची से बढ़ शुरू होता है, संयोजन की इस पद्धति का प्रदर्शन समस्याओं का कारण बन रहा है। आप एक StringBuilder उपयोग करने के लिए इसे संशोधित कर सकते हैं:

var str = guids.Select(g => g.ToString()) 
       .Aggregate(new StringBuilder(), 
          (sb, str) => sb.Append("," + str), 
          sb => sb.ToString()); 

उन दोनों काम करने के जटिल LINQ विस्तार विधि तरीका है। तुम भी बस String.Join इस्तेमाल कर सकते हैं:

var str = String.Join(",", guids.Select(g => g.ToString()).ToArray()); 
+0

वाह, सही! धन्यवाद! – BrunoLM

+2

@ ब्रूनो, इसे स्वीकार किए गए उत्तर के रूप में चिह्नित करें यदि यह आपके लिए काम करता है !! :-) – DaveDev

+0

मैं उत्सुक हूं कि यह अन्य विधियों की तुलना में कितनी तेजी से काम करता है। मैं अनुमान लगा रहा हूं कुल मिलाकर स्मृति को आवंटित करने के लिए String.Concat का उपयोग नहीं करता है। –

5

के लिए मुझे लगा कि यह काम करेगा?

StringBuilder stringBuilder = new StringBuilder(); 
int i = 0; 
foreach (var guid in guids) 
{ 
    stringBuilder.Append(guid.ToString()); 
    if (++i < guids.Length) 
    { 
     stringBuilder.Append(","); 
    } 
} 

var str = stringBuilder.ToString(); 
+0

आप भूल ',' GUIDs के बीच;) – Oded

+2

कि अंत में एक अतिरिक्त अल्पविराम डाल देंगे। –

+0

ठीक है, मैंने कॉमा मुद्दे को तुरंत ठीक करने का प्रयास किया। यह अवांछित है। मुझे उम्मीद है कि यह काम करता है :-) – DaveDev

18
String.Join(",", guids.Select(g => g.ToString()).ToArray()); 
+0

महान और सरल उत्तर –

+3

.NET 4 ने एक सामान्य 'जॉइन' विधि जोड़ा जो आप बिना किसी संशोधन के 'guids' सरणी को पास कर सकते हैं – thecoop

+0

@thecoop: नोट किया गया, धन्यवाद। –

1

अगर आपके ढांचे> = नेट 3,5


String.Join(",", (from g in guids select g.ToString()).ToArray()) 
13

.NET 4 जोड़ा एक String.Join<T>(string separator, IEnumerable<T> values विधि। तो, .NET 4 में, बस इस काम करेगा:

String.Join(",", guids); 
+0

यह जानना अच्छा है, धन्यवाद। – BrunoLM

1
String.Join(",", Array.ConvertAll(guids, g => g.ToString())); 
+0

ऐसा लगता है कि यह कथन VS2010 में संकलन पास नहीं कर सकता है? – Thomson

+0

Array.ConvertAll को उस वर्ग की आवश्यकता है जो 'कनवर्टर ' लागू करता है, आप एक विधि में गुजर रहे हैं। –

0
//Convert string to List<string>  
List<string> guidList = your_string.Split(',').ToList<string>(); 

//Convert string to List<Guid>  
List<Guid> guidList = your_string.Split(',').ToList<string>().ConvertAll<Guid>(g => new Guid(g)); 
संबंधित मुद्दे