166 votes

Comment diviser et découper une chaîne en plusieurs parties sur une seule ligne ?

Je souhaite scinder cette ligne :

string line = "First Name ; string ; firstName";

en un tableau de leurs versions tronquées :

"First Name"
"string"
"firstName"

Comment puis-je faire tout cela sur une seule ligne ? Ce qui suit me donne une erreur "cannot convert type void" :

List<string> parts = line.Split(';').ToList().ForEach(p => p.Trim());

2 votes

L'erreur est renvoyée parce que ForEach fonctionne sur l'instance actuelle de IEnumerable et renvoie void .

376voto

Cédric Rup Points 5363

Essayer

List<string> parts = line.Split(';').Select(p => p.Trim()).ToList();

Pour information, la méthode Foreach prend en paramètre une Action (prend T et renvoie void), et votre lambda renvoie une chaîne de caractères comme string.Trim renvoie une chaîne de caractères.

La méthode d'extension Foreach est destinée à modifier l'état des objets de la collection. Comme les chaînes de caractères sont immuables, cela n'aurait aucun effet

J'espère que cela vous aidera ;o)

Cédric

4 votes

Nota: ForEach n'est pas une méthode d'extension.

0 votes

La meilleure solution en Linq !

0 votes

S'il n'y a pas de valeurs, le système renvoie-t-il null ?

27voto

Guffa Points 308133

En ForEach ne renvoie rien, vous ne pouvez donc pas l'assigner à une variable.

Utiliser le Select à la place de la méthode d'extension :

List<string> parts = line.Split(';').Select(p => p.Trim()).ToList();

20voto

Après .net 5, la solution est aussi simple que :

List<string> parts = line.Split(';', StringSplitOptions.TrimEntries);

6voto

Matt Breckon Points 2504

Parce que p.Trim() renvoie une nouvelle chaîne.

Vous devez utiliser :

List<string> parts = line.Split(';').Select(p => p.Trim()).ToList();

4voto

LawMan Points 123

Voici une méthode d'extension...

    public static string[] SplitAndTrim(this string text, char separator)
    {
        if (string.IsNullOrWhiteSpace(text))
        {
            return null;
        }

        return text.Split(separator).Select(t => t.Trim()).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