如何将IEnumerable <char>转换为string [],以便我可以将它与String.Join一起使用?

Edw*_*uay 7 c# string

如何将IEnumerable<char>"nonLetters" 转换为a string[]以便我可以将它与String.Join一起使用?

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.ToArray())
    );
Run Code Online (Sandbox Code Playgroud)

Luk*_*keH 12

string[] foo = nonLetters.Select(c => c.ToString()).ToArray();
Run Code Online (Sandbox Code Playgroud)


Ray*_*rns 5

如果您实际上并不关心使用String.Join但只想要结果,则使用新字符串(char [])是最简单的更改:

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,
     new string(nonLetters.ToArray()));
Run Code Online (Sandbox Code Playgroud)

但是对于你的例子,如果你这样做会更有效:

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);
Run Code Online (Sandbox Code Playgroud)

究其原因,这是更有效的是,其他的例如迭代你哪里迭代器两次:一次是对count()调用,其他时间ToArray的()调用.