3

我正在做一个练习,我应该向用户询问一个字符串,然后反转字符串并将其打印到控制台。我写了这个:

        Console.WriteLine("Please enter a string of characters: ");
        char[] words = Console.ReadLine().ToCharArray();
        Console.WriteLine("You entered {0}, the reverse of which is {1}", words.ToString(), words.Reverse().ToString());

这没有用。显然,将 char 数组发送到 .ToString() 会返回“System.Char[]”,并将其反转返回“System.Linq.Enumerable+d__a0`1[System.Char]”。

我了解到 .ToString() 无法处理 char 数组,而我不得不使用新的字符串构造函数,因此我将代码重写为它,它现在可以工作了:

        Console.WriteLine("Please enter a string of characters: ");
        char[] words = Console.ReadLine().ToCharArray();
        Console.WriteLine("You entered {0}, the reverse of which is {1}", new string(words), new string(words.Reverse().ToArray()));

我的问题是为什么我不能在 char 数组上使用 .ToString() ?ToString 的摘要含糊地说“返回一个代表当前对象的字符串”,这对我来说意味着我会得到一个代表我发送的 char 数组的字符串。我错过了什么?

4

2 回答 2

3

虽然我找不到具体的证据(到目前为止)。我相信您不能在 char 数组上使用它,因为Array 类型是引用类型,这意味着它们包含对实际值的引用,而不是每个字符的值。如我的评论中所述,它返回“System.Char []”;它返回ToString 的默认值

编辑

这是我正在寻找的证据 https://stackoverflow.com/a/1533770/1324033

于 2013-05-23T18:11:29.210 回答
1

您收到该值是因为它是 char[] 数组的默认值,通常是对象。当您想为您的案例更改 .ToString() 行为时,您可以使用(例如)扩展方法覆盖默认的 ToString() 方法。

于 2013-05-23T17:49:20.257 回答