2011-01-15 9 views
19

मैं पूरी तरह से सी # के लिए नया हूं और जैसे ही मैं जाता हूं। मैं इस मुद्दे पर फंस गया हूं जो मुझे उम्मीद है कि एक अनुभवी प्रोग्रामर मदद कर सकता है। मैंने अपने फॉर्म में एक चेकडलिस्टबॉक्स जोड़ा है और इसमें 6 आइटम का संग्रह जोड़ा है। मुझे इसके अलावा एक अंतिम कॉमा रखने के लिए चयनित अंतिम आइटम की आवश्यकता है, इसलिए मेरा सवाल यह है कि मैं सी # को अंतिम आइटम के बगल में अल्पविराम रखने के लिए कैसे कह सकता हूं?सी # प्रत्येक शब्द के बाद कॉमा कैसे रखें, सूची में अंतिम

foreach (object itemChecked in RolesCheckedListBox.CheckedItems) 
{ 
    sw.Write(itemChecked.ToString() + ","); 
} 

किसी भी मदद के लिए धन्यवाद! दान

+0

मैं अपने समाधान में फ़ोरैच लूप की बजाय स्ट्रिंग का उपयोग करने की अनुशंसा करता हूं। – Tillito

+0

इसमें बेहतर उत्तर देखें: http://stackoverflow.com/questions/11771741/how-to-remove-last-comma-from-query-c-sharp –

उत्तर

6

एक तरह से अपने उदाहरण को बढ़ाने के लिए किया जा सकता है:

var index = 0; 
foreach (object itemChecked in RolesCheckedListBox.CheckedItems) 
{ 
    if (index>0) sw.Write(","); 
    sw.Write(itemChecked.ToString()); 
    index++; 
} 

सुरुचिपूर्ण नहीं, लेकिन काम कर रहे।

+2

धन्यवाद इसने एक इलाज किया है! –

44

यह string.Join() विधि का उपयोग किया जा सकता है:

string commaSeparated = string.Join(",", 
       RolesCheckedListBox.CheckedItems.Select(item => item.ToString()); 

उदाहरण के लिए:

string[] names = new []{ "a", "b"}; 
string separatedNames = string.Join(",", names); 

परिणाम होगा कि separatedNames"a,b"

+2

'चयन' केवल' IENumerable 'के लिए परिभाषित किया गया है, इसलिए आपको चेक किए गए इटम्स के बाद' कास्ट () 'डालना होगा क्योंकि यह केवल' आईन्यूमेरेबल 'लागू करता है। – Lee

+0

@Lee, अच्छी बात, भूमिकाओं की जांच ListBox.CheckedItems.Cast ()। चयन करें (item => item.ToString()) – Elisha

+0

हाँ की आवश्यकता हो सकती है। शायद मेरा समाधान बेहतर पठनीय है तो – Tillito

4

आप Join समारोह का उपयोग कर सकते हो जाएगा लो के बजाय oping:

sw.Write(string.Join(",", RolesCheckedListBox.CheckedItems)); 
0
foreach (object itemChecked in RolesCheckedListBox.Items) 
      { 
       if (itemChecked != RolesCheckedListBox.Items[RolesCheckedListBox.Items.Count - 1]) 
        sw.Write(itemChecked.ToString() + ","); 
      } 

आपकी मदद चाहिए। इसके अलावा, मैंने अभी "आइटम" का उपयोग किया है, आपने चेक किए गए इटम्स का उपयोग किया था। चेक किए गए आइटम्स के माध्यम से आइटम्स के सभी उदाहरणों को बदलें यदि आप केवल चेक किए गए आइटमों के माध्यम से पुन: प्रयास करना चाहते हैं।

+0

आपके त्वरित प्रतिक्रियाओं के लिए धन्यवाद, यह एक इलाज किया है !! –

1
  1. LINQ का उपयोग कर
  2. उपयोग String.Join

की तरह एक स्ट्रिंग सरणी के लिए अपने ListItemCollection परिणत:

public string ItemsToString(ListItemCollection items) 
{ 
    string[] stringArray = (from ListItem item in items where item.Selected select item.ToString()).ToArray(); 
    return String.Join(", ", stringArray); 
} 

आप इसे द्वारा

sw.Write(ItemsToString(RolesCheckedListBox.CheckedItems)); 

या इस्तेमाल कर सकते हैं यदि आप एक सिंगल पसंद करते हैं इस काम के लिए ई लाइन:

sw.Write(String.Join(", ", (from ListItem item in RolesCheckedListBox.CheckedItems select item.ToString()).ToArray())); 
+0

बहुत अच्छा! कोड की दो पंक्तियों में अग्रणी कॉमा समस्या हल करें! –

1

नेट 4 में आप स्थिर उपयोग कर सकते हैं String.Join<T> Method (String, IEnumerable<T>) और concatenated स्ट्रिंग मुद्रित करें।

अन्यथा आसान तरीका सभी तत्वों के लिए अल्पविराम लेकिन पहले एक पहले जोड़ें करने के लिए है:

bool shouldPrependComma = false; 
foreach (object itemChecked in RolesCheckedListBox.CheckedItems) 
{ 
    if (shouldPrependComma) sw.Write(","); 
    sw.Write(itemChecked.ToString()); 
    shouldPrependComma = true; 
} 
8

यहाँ कुछ लेख मैं इस समस्या के बारे में लिखा है:

http://blogs.msdn.com/b/ericlippert/archive/2009/04/13/restating-the-problem.aspx

http://blogs.msdn.com/b/ericlippert/archive/2009/04/15/comma-quibbling.aspx

दूसरे लेख की टिप्पणियों में समस्या के थोड़ा कठिन संस्करण के दर्जनों समाधान हैं; यह उन समाधानों को ब्राउज़ करने के लिए शैक्षिक है और देखें कि आप कौन से सुरुचिपूर्ण पाते हैं और जिन्हें आप सकल पाते हैं।

0

जॉन स्कीट ने इस तरह की समस्या के लिए SmartEnumerable लागू किया।

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