【问题标题】:Why can't I use a .ToString() method on a char array in C#?为什么我不能在 C# 中的 char 数组上使用 .ToString() 方法?
【发布时间】:2013-05-19 04:53:02
【问题描述】:

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

        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 数组的字符串。我错过了什么?

【问题讨论】:

标签: c# arrays char tostring


【解决方案1】:

虽然我找不到具体的证据(到目前为止)。我相信您不能在 char 数组上使用它作为Array types are reference types,这意味着它们持有对实际值的引用,而不是每个字符的值。如我的评论所述,它返回“System.Char []”;它返回default value for ToString

编辑

这就是我要找的证据 https://stackoverflow.com/a/1533770/1324033

【讨论】:

  • 感谢链接“ToString 的默认值”。ToString 方法的默认实现返回对象类型的完全限定名称。我现在看到许多 C# 内置类型已经覆盖了 ToString 的默认行为,而是返回该特定对象实例的值。类型通常会覆盖 ToString 方法以返回表示对象实例的字符串。例如,Char、Int32 和 String 等基本类型提供了 ToString 实现,这些实现返回对象表示的值的字符串形式。
  • 扩展“我相信你不能在 char 数组上使用它,因为数组类型是引用类型”,我认为这不是真的。毕竟,字符串本身是一个引用类型,你可以在字符串上使用 ToString。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2020-02-17
    • 2019-05-07
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 2014-01-03
    • 1970-01-01
    • 2010-11-28
    • 2010-09-09
    相关资源
    最近更新 更多