web-dev-qa-db-fra.com

Comment convertir une chaîne séparée par des virgules en une liste <int>

string tags = "9,3,12,43,2"

List<int> TagIds = tags.Split(',');

Cela ne fonctionne pas car la méthode split renvoie une chaîne []

S'il vous plaît aider.

174
ignaciofuentes

Voici une façon de le faire:

List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();
387
dasblinkenlight

Si vous souhaitez inclure une validation simple et ignorer les valeurs non valides (au lieu de déclencher une exception), voici quelque chose qui utilise TryParse:

string csv = "1,2,3,4,a,5";
int mos = 0;
var intList = csv.Split(',')
                    .Select(m => { int.TryParse(m, out mos); return mos; })
                    .Where(m => m != 0)
                    .ToList();

//returns a list with integers: 1, 2, 3, 4, 5

EDIT: Voici une requête mise à jour basée sur les commentaires d'Antoine. TryParse est d'abord appelé pour filtrer les valeurs incorrectes, puis Parse pour effectuer la conversion.

string csv = "1,2,3,4,a,5,0,3,r,5";
int mos = 0;
var intList = csv.Split(',')
                    .Where(m => int.TryParse(m, out mos))
                    .Select(m => int.Parse(m))
                    .ToList();

//returns a list with integers: 1, 2, 3, 4, 5, 0, 3, 5
20
khalid13

Vous pouvez utiliser LINQ w/int.Parse() pour convertir le string[] en IEnumerable<int>, puis transmettre ce résultat au constructeur List<T>:

var tagIds = new List<int>(tags.Split(',').Select(s => int.Parse(s)));
14
Justin Niessner

Un petit LINQ va un long chemin:

 List<int> TagIds = tags.Split(',')
         .Select(t => int.Parse(t))
         .ToList();
7
Henk Holterman

Sans requête LINQ, vous pouvez choisir cette méthode,

string tags = "9,3,12,43,2";
List<string> numbers = nos.Split(',').ToList<string>();

et alors vous pouvez convertir cette liste en type entier ...

6
user4860969
string tags = "9,3,12,43,2"

List<int> TagIds = tags.Split(',').Select(x => x.Trim()).Select(x=> Int32.Parse(x)).ToList();
4
Oybek

Si vous utilisez C # 3.5, vous pouvez utiliser Linq pour y parvenir.

string tags = "9,3,12,43,2";
List<int> tagIds = tags.Split(',').Select(s=>int.Parse(s)).ToList();

ou le court

string tags = "9,3,12,43,2";
List<int> tagIds = tags.Split(',').Select(int.Parse).ToList();
2
Agustin Meriles
string tags = "9,3,12,43,2";
List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();
2
LiquidPony

Je suis tombé sur cela et je veux juste partager ma propre solution sans linq. C'est une approche primitive. Les valeurs non entières ne seront pas ajoutées à la liste également.

List<int> TagIds = new List<int>();
string[] split = tags.Split(',');
foreach (string item in split)
{
    int val = 0;
    if (int.TryParse(item, out val) == true)
    {
        TagIds.Add(val);
    }
}

J'espère que cela t'aides.

1
drchanix

J'ai modifié la réponse de khalid13. Si l'utilisateur met une chaîne de "0", sa réponse l'enlèvera de la liste résultante. J'ai fait quelque chose de similaire mais j'ai utilisé un objet anonyme.

var result = commaSeparatedString.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
            .Select(s => new { didConvert = int.TryParse(s.TrimNullProtection(), out convertedInt), convertedValue = convertedInt })
            .Where(w => w.didConvert)
            .Select(s => s.convertedValue)
            .ToList();

TrimNullProtection est une fonction personnalisée que j'ai créée et qui protège si la chaîne est null.

Ce qui précède fait disparaître toutes les chaînes qui n'ont pas pu être converties sans erreur. Si vous devez vous tromper s'il y a un problème avec la conversion, la réponse acceptée devrait faire l'affaire.

1
SolidSnake4444

C'est simple. D'abord diviser la chaîne. Coupez l'espace vide après la virgule (,). Ensuite, utilisez système défini ToList ()

string TradeTypeEnum = "Physical Deal, Physical Concentrate"

Pour supprimer l'espace après ',' et convertir ce texte séparé par des virgules en Liste

List<string> IDs = (TradeTypeEnum.Split(',')).Select(t => t.Trim()).ToList();
0
Parag555