Convertire la stringa in List <string> in una riga?


102

Ho una stringa:

var names = "Brian,Joe,Chris";

C'è un modo per convertirlo in un List<string>delimitato da ,in una riga?


15
Non capisco il requisito "in una riga". Cerca di scrivere codice chiaro e comprensibile, non modi per adattare un'operazione in uno spazio il più piccolo possibile.
Ed S.

6
Con l'avvento di LINQ, "linee singole" leggibili e pulite sono diventate molto più comuni in C # IMO.
Matt Greer

5
@Ed S. - Anche se sono d'accordo sul fatto che "in una riga" potrebbe non essere il modo migliore per dirlo, affermazioni su una riga come quella fornita da Matt Greer tendono ad essere molto chiare e comprensibili. La mia ipotesi è che voglia semplicemente evitare di utilizzare un forciclo, che è più noioso, soggetto a errori e poco chiaro.
StriplingWarrior

4
Non intendo dire che le battute siano intrinsecamente più difficili da capire, sto solo dicendo che non dovrebbero mai essere un requisito. Fallo nel modo migliore disponibile. Se capita di essere in una riga, ottimo, ma non è qualcosa che dovrebbe modellare il modo in cui scrivi il tuo codice.
Ed S.

Risposte:


198
List<string> result = names.Split(new char[] { ',' }).ToList();

O anche più pulito secondo il suggerimento di Dan:

List<string> result = names.Split(',').ToList();

11
Potresti averlo messo lì apposta, ma tralascio sempre l'intera new char[] { }parte. È più leggibile in questo modo, almeno per me .
Dan Tao,

4
@ Dan: sono d'accordo e generalmente uso il sovraccarico dei parametri. Ma per rispondere a una domanda a volte mi sembra che la verbosità sia migliore. Solo una questione di opinione, davvero.
Matt Greer,

2
ToList () non sembra più essere disponibile?
Gina Marano

10
Hai portato lo System.LINQspazio dei nomi?
Matt Greer

42

Il List<T>ha un costruttore che accetta un IEnumerable<T>:

List<string> listOfNames = new List<string>(names.Split(','));

Eccellente - non c'è bisogno di importare System.Linq
VictorySaber

3

Lo preferisco perché impedisce un singolo elenco di elementi con un elemento vuoto se la stringa di origine è vuota:

  IEnumerable<string> namesList = 
      !string.isNullOrEmpty(names) ? names.Split(',') : Enumerable.Empty<string>();


1
string given="Welcome To Programming";
List<string> listItem= given.Split(' ').ToList();//Split according to space in the string and added into the list

produzione:

Welcome

To 

Programming

0

Se si dispone già di un elenco e si desidera aggiungere valori da una stringa delimitata, è possibile utilizzare AddRangeo InsertRange. Per esempio:

existingList.AddRange(names.Split(','));

0

Usa il pacchetto nuget Stringify.Library

//Default delimiter is ,
var split = new StringConverter().ConvertTo<List<string>>(names);

//You can also have your custom delimiter for e.g. ;
var split = new StringConverter().ConvertTo<List<string>>(names, new ConverterOptions { Delimiter = ';' });
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.