为何char数组ToString返回System.Char[]而非反转字符串?输出差异解惑
嗨,我来帮你把这两个问题彻底讲明白~
问题1:为何char数组的ToString方法返回System.Char[]而非反转后的字符串?
其实核心原因很简单:在C#里,所有数组(包括char[])都继承自System.Array基类,而Array并没有重写Object类自带的ToString()方法。Object的默认ToString()逻辑就是返回当前对象的类型全名,所以当你调用charArray.ToString()时,它只会告诉你“我是个字符数组类型”,完全不会把数组里的字符拼接成字符串——它根本没这个功能。
问题2:为什么第一个Console.WriteLine输出反转后的字符串,第二个却返回System.Char[]?
这是因为Console.WriteLine有多个重载方法,处理参数的逻辑不一样:
- 当你直接把
char[]传给Console.WriteLine时,它会匹配到专门为字符数组设计的重载:Console.WriteLine(char[] value)。这个重载会自动把字符数组转换成对应的字符串输出,所以你能看到反转后的内容。 - 但如果你先调用
charArray.ToString()再传进去,比如写Console.WriteLine(charArray.ToString()),这时候你传的是一个普通字符串(也就是System.Char[]这个类型名),所以输出的就是这个字符串本身了。
举个直观的代码例子,你大概率写了类似这样的代码:
char[] myChars = "test".ToCharArray(); Array.Reverse(myChars); // 输出反转后的字符串:tset Console.WriteLine(myChars); // 输出类型名:System.Char[] Console.WriteLine(myChars.ToString());
如果想手动把char数组转成字符串,别用ToString(),应该用new string(myChars),这样就能得到拼接后的字符串啦。
内容的提问来源于stack exchange,提问作者ThePigeon109
相关产品推荐
相关产品推荐

