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(newchar[]{','}).ToList();
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>:
string given="Welcome To Programming";List<string> listItem= given.Split(' ').ToList();//Split according to space in the string and added into the list
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:
//Default delimiter is ,var split =newStringConverter().ConvertTo<List<string>>(names);//You can also have your custom delimiter for e.g. ;var split =newStringConverter().ConvertTo<List<string>>(names,newConverterOptions{Delimiter=';'});
for
boucle, qui est plus fastidieuse, sujette aux erreurs et peu claire.Réponses:
Ou même plus propre par la suggestion de Dan:
la source
new char[] { }
partie entière . C'est plus lisible de cette façon, du moins pour moi .System.LINQ
espace de noms?Le
List<T>
a un constructeur qui accepte unIEnumerable<T>
:la source
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:
la source
Divisez une chaîne délimitée par des caractères et renvoyez tous les éléments non vides.
https://docs.microsoft.com/en-us/dotnet/api/system.string.split?view=netframework-4.8
la source
production:
la source
Si vous disposez déjà d'une liste et souhaitez ajouter des valeurs à partir d'une chaîne délimitée, vous pouvez utiliser
AddRange
ouInsertRange
. Par exemple:la source
Utilisez le package nuget Stringify.Library
la source