Convertir la chaîne en List <string> en une seule ligne?


102

J'ai une chaîne:

var names = "Brian,Joe,Chris";

Existe-t-il un moyen de convertir cela en un List<string>délimité par ,dans une ligne?


15
Je ne comprends pas l'exigence «en une ligne». Cherchez à écrire du code clair et compréhensible, et non à insérer une opération dans un espace aussi petit que possible.
Ed S.

6
Avec l'avènement de LINQ, les "one liners" qui sont lisibles et propres sont devenus beaucoup plus courants dans C # IMO.
Matt Greer

5
@Ed S. - Bien que je sois d'accord sur le fait que "en une seule ligne" n'est peut-être pas la meilleure façon de le dire, les déclarations sur une seule ligne comme celle fournie par Matt Greer ont tendance à être très claires et compréhensibles. Je suppose qu'il veut simplement éviter d'utiliser une forboucle, qui est plus fastidieuse, sujette aux erreurs et peu claire.
StriplingWarrior

4
Je ne veux pas dire que les one-liners sont intrinsèquement plus difficiles à comprendre, je dis simplement que cela ne devrait jamais être une exigence. Faites-le de la meilleure façon possible. Si cela se trouve sur une seule ligne, c'est parfait, mais ce n'est pas quelque chose qui devrait façonner la façon dont vous écrivez votre code.
Ed S.

Réponses:


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

Ou même plus propre par la suggestion de Dan:

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

11
Vous l'avez peut-être mis là exprès, mais j'oublie toujours la new char[] { }partie entière . C'est plus lisible de cette façon, du moins pour moi .
Dan Tao

4
@Dan: Je suis d'accord, et généralement j'utilise la surcharge de paramètres. Mais pour une réponse à une question, j'ai parfois l'impression que la verbosité est meilleure. Juste une question d'opinion vraiment.
Matt Greer

2
ToList () ne semble plus être disponible?
Gina Marano

10
Avez-vous introduit l' System.LINQespace de noms?
Matt Greer

42

Le List<T>a un constructeur qui accepte un IEnumerable<T>:

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

Excellent - pas besoin d'importer System.Linq
VictorySaber

3

Je préfère cela car cela empêche une seule liste d'éléments avec un élément vide si votre chaîne source est vide:

  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

production:

Welcome

To 

Programming

0

Si vous disposez déjà d'une liste et souhaitez ajouter des valeurs à partir d'une chaîne délimitée, vous pouvez utiliser AddRangeou InsertRange. Par exemple:

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

0

Utilisez le package 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 = ';' });
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.