c#将反转的字符串存储到另一个字符串中

c# storing reversed string into another string

block1 有效:-

String input = "The quick brown fox jumps over the lazy dog";
char[] output = input.Reverse().ToArray();
Console.WriteLine(output);

当我尝试将输出 存储到一个新的字符串 中时,block2 也能正常工作:-

String input = "The quick brown fox jumps over the lazy dog";
char[] output = input.Reverse().ToArray()
String output2 = new String(output);
Console.WriteLine(output2);

但是当我尝试将输出 存储到字符串 中时,block3 不起作用:-

String input = "The quick brown fox jumps over the lazy dog";
char[] output = input.Reverse().ToArray()
String output2 = output; //I tried to use convert.ToString() as well,  but it didn't work
Console.WriteLine(output2);

为什么块 2 工作而块 3 不工作??

why does block 2 works and block 3 does not ??

block 2 使用接受 char 数组的 constructor of string。这是 Microsoft 提供的现有构造函数,用于形成新的字符串

块 3 需要在 char 数组和字符串之间定义隐式转换,因为 Reverse().ToArray() 的输出是 char 数组,而不是字符串。重要的是要认识到字符串可以被视为 IEnumerable<char>,并且您可以对它们使用 运行 LINQ 方法,例如 Reverse,但是因为它们在, 它们以 char 序列的形式出现,而不是字符串。您不能直接将 char 数组分配给字符串变量,因为 Microsoft 没有提供此类转换

您可能会发现 this discussion on SESE 有趣且相关

脚注;你问为什么不能在 char 数组上调用 ToString - 再一次,char[] 上没有 ToString 的重载将 char 数组转换为字符串,因为 Microsoft 没有'提供了一个。

有足够多的方法可以将 char[] 变成 string(你的块 2 是理想的),微软不需要花费时间和精力来制作另一个,而你还必须考虑可能有代码 依赖于 someCharArray.ToString() 返回 System.Char[] - 不是每个人都知道你可以做到 myObject is char[],他们可能有已完成 myObject.ToString == "System.Char[]" 检查对象是否为字符数组。

每当使用新功能升级语言时,将调查新功能可能导致的所有可能问题。将 .ToString() 添加到 char[] 以从字符生成字符串,并静静地(因为它不会导致编译错误)破坏全球数百万个代码库的风险太大了,当您已经可以做的事情没有任何好处时:

var chars = new[]{'H','e','l','l','o',' ','W','o','r','l','d'}

var s = chars.ToString();     //produces "System.Char[]"
var s = new string(chars);    //produces "Hello World"
                         ^
                  one extra keystroke

使用constructor版本只需要多敲一次键,如果使用现代c#不需要在new后面声明类型,只要类型在另一边,甚至比旧的 var 版本也是:)

var s = chars.ToString();
string s = new(chars);