249 votes

Diviser une chaîne de caractères, convertir ToList<int>() en une ligne

J'ai une chaîne qui contient des chiffres

string sNumbers = "1,2,3,4,5";

Je peux le diviser puis le convertir en List<int>

sNumbers.Split( new[] { ',' } ).ToList<int>();

Comment puis-je convertir un tableau de chaînes de caractères en liste d'entiers ? Pour que je puisse convertir string[] a IEnumerable

0 votes

Nous avons eu exactement la même question aujourd'hui : Cliquez sur moi

3 votes

En "une ligne" si une très forte est une exigence très stricte ! </perl>

2 votes

Cette question demande spécifiquement de diviser une chaîne de chiffres, ce qui rend la réponse simple. La question mentionnée par Dario traite (s'enlise dans ?) des problèmes de TryParse pour les chaînes de caractères générales.

612voto

mquander Points 32650
var numbers = sNumbers.Split(',').Select(Int32.Parse).ToList();

7 votes

Cette exception se produit lorsque la liste a une valeur vide ou nulle.

0 votes

@SayedM.Idrees vérifie juste la nullité ou le vide avant de diviser.

7 votes

Ajouter un contrôle de nullité : var numbers = sNumbers ?.Split(',').Select(Int32.Parse).ToList() ;

42voto

adem.o Points 26

Mieux utiliser int.TryParse pour éviter les exceptions ;

var numbers = sNumbers
            .Split(',')
            .Where(x => int.TryParse(x, out _))
            .Select(int.Parse)
            .ToList();

39voto

Joze Points 986

Vous pouvez également procéder de cette manière sans avoir recours à Linq :

List<int> numbers = new List<int>( Array.ConvertAll(sNumbers.Split(','), int.Parse) );

// Uses Linq
var numbers = Array.ConvertAll(sNumbers.Split(','), int.Parse).ToList();

20voto

yuxio Points 26

La méthode de Joze a également besoin de LINQ, ToList() est en System.Linq espace de noms.

Vous pouvez convertir un tableau en liste sans Linq en passant le tableau au constructeur de la liste :

List<int> numbers = new List<int>( Array.ConvertAll(sNumbers.Split(','), int.Parse) );

13voto

Mukesh Kalgude Points 4258

Il est également possible d'utiliser un tableau d'int pour assigner directement une valeur.

comme ceci

int[] numbers = sNumbers.Split(',').Select(Int32.Parse).ToArray();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X