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);
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);