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.