7
votes

Comment convertir iEnumerable en string [] pour que je puisse l'utiliser avec string.join?

Comment puis-je convertir le iEnumerable "non-sous-états" à une chaîne [] afin que je puisse l'utiliser avec string.join? xxx < / pré>


0 commentaires

6 Réponses :


2
votes
string[] result = nonLetters.Select(c => new string(new[] { c })).ToArray();

1 commentaires

Cela ne produit pas de chaîne [] comme Edward demandé.



12
votes
string[] foo = nonLetters.Select(c => c.ToString()).ToArray();

0 commentaires

1
votes

Il suffit de sélectionner une chaîne au lieu d'un caractère de chacune de votre non-lettre.

String() nonLetters = message.Where(x => !Char.IsLetter(x))
                             .Select(x => x.ToString())
                             .ToArray();


2 commentaires

Notez que vous n'avez besoin que de le faire dans l'appel à String.join - avec ce code, l'appel de Count () se retrouvera à la conversion de chaque caractère en une chaîne inutile. (Sinon, vous pouvez appeler TOLIST pour uniquement calculer les résultats une fois.)


Vous avez raison, n'a pas pensé à l'appel .Count (). La solution la plus optimale serait d'ajouter le .totarray () avant la console.writeine ​​alors ;-)



3
votes

Je pense que vous voulez:

string message = "This is a test message.";

var nonLetters = message.Where(x => !Char.IsLetter(x));

Console.WriteLine("There are {0} non-characters in \"{1}\" and they are: {2}", 
    nonLetters.Count(), 
    message,
    String.Join(", ", nonLetters.Select(x => x.ToString()).ToArray())
    );


0 commentaires

5
votes

Si vous ne vous souciez pas d'utiliser String.join mais que vous souhaitez uniquement le résultat, en utilisant nouvelle chaîne (char []) strong> est le changement le plus simple:

string message = "This is a test message.";
string nonLetters = new string(message.Where(x => !Char.IsLetter(x)).ToArray());
Console.WriteLine("There are {0} non-characters in \"{1}\" and they are: {2}",
     nonLetters.Length,
     message,
     nonLetters);


0 commentaires

0
votes

avec .NET 4 Vous avez une autre surcharge pour rejoindre. Aussi simple que:

var nonLettersJoined = string.Join(", ", message.Where(x => char.IsLetter(x)));


0 commentaires