2011-01-15 7 views
19

Całkowicie nowe C# i uczenia się, jak przejść. Mam problem, który mam nadzieję, że doświadczony programista może pomóc. Dodałem CheckedListBox do mojego formularza i dodałem do niego kolekcję 6 elementów. Potrzebuję wszystkich oprócz ostatniego wybranego elementu, aby umieścić obok niego przecinek, więc moje pytanie brzmi: jak mogę powiedzieć C# NIE, aby umieścić przecinek obok wybranego ostatniego elementu?C# Jak umieścić przecinek po każdym słowie, ale ostatnie na liście

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

Dziękujemy za otrzymaną pomoc! Dan

+0

Polecam używać łańcucha zamiast pętli foreach, tak jak w moim rozwiązaniu. – Tillito

+0

Zobacz lepszą odpowiedź w tym: http://stackoverflow.com/questions/11771741/how-to-remove-last-comma-from-query-c-sharp –

Odpowiedz

6

Sposobem na zwiększenie przykładem mogą być:

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

Nie eleganckie, ale działa.

+2

Dzięki temu zadziałał smakołyk! –

44

Można to zrobić za pomocą string.Join() metody:

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

Na przykład:

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

Spowoduje to separatedNames będzie "a,b"

+2

'Wybierz' jest zdefiniowane tylko dla' IEnumerable ', więc musisz umieścić' Cast () 'po CheckedItems, ponieważ implementuje on tylko' IEnumerable'. – Lee

+0

@Lee, dobry punkt, RolesCheckedListBox.CheckedItems.Cast (). Wybierz (element => element.ToString()) może być wymagany – Elisha

+0

Tak. Może moje rozwiązanie jest lepiej czytelne niż wtedy – Tillito

4

Można użyć funkcji Join zamiast lo 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() + ","); 
      } 

To powinno pomóc. Ponadto, po prostu użyłem "Przedmioty", użyłeś CheckedItems. Zmień wszystkie wystąpienia elementów na CheckedItems, jeśli chcesz tylko przechodzić przez sprawdzone elementy.

+0

Dziękuję wszystkim za szybkie odpowiedzi to zadziałało !! –

1
  1. przekształcić ListItemCollection do tablicy ciągów za pomocą LINQ
  2. użycie string.join

odczuwalna:

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

można go używać przez

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

Or jeśli wolisz singl Linia e do pracy:

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

Bardzo ładne! Rozwiąż główny problem z przecinkiem w dwóch liniach kodu! –

1

w .NET 4 można używać statycznych String.Join<T> Method (String, IEnumerable<T>) i wydrukuj połączony ciąg.

Inaczej łatwy sposób to poprzedzić przecinek do wszystkich elementów, ale pierwszy z nich:

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