5

ToString()覆盖的约定是什么?有问题的类既有Name属性,也有Id.

4

7 回答 7

7

做你需要做的。本身没有约定,就像在覆盖类似的东西时那样.Equals()and .GetHashCode()

如果您想在执行期间中断时影响调试器中显示的内容,请不要使用ToString()-use DebuggerDisplayAttribute

于 2012-11-26T12:50:28.617 回答
2

您可以参考以下链接

覆盖 System.Object.ToString() 并实现 IFormattable

揭秘 C# 编程的 ToString 方法

如何:覆盖 ToString 方法

我的经验法则

  1. 它应该与EqualsGetHashCode同步
  2. 它应该与 Parse 方法同步(如果我提供)
  3. 如果需要自定义格式,请使用 IFormattable
于 2012-11-26T12:54:32.293 回答
1

我不知道任何约定。我通常打印在文本上下文中看起来合适的内容。Id可能和可能不适合您的上下文。

我的经验法则是ToString应该显示两个对象是否Equals存在。

于 2012-11-26T12:49:44.147 回答
1

据我所知, forToString()的约定与 objectGetHashCodeEquals.

也就是说,当Equals返回true时,则应该生成相同的哈希码GetHashCode。除此之外,我想说当Equals返回 true 时,ToString应该返回相同的字符串。

于 2012-11-26T12:50:21.050 回答
1

我认为实施ToString()应该牢记三点:

  • 字符串表示应该是人类可读的,例如,您可以将其用于日志/控制台输出或例如在DebuggerDisplay属性中。
  • 如果您Parse的类中有任何方法,它应该能够解析ToString调用的结果。此外myInstance.Equals(MyClass.Parse(myInstance.ToString()))应该评估为true
  • 如果两个实例相等,它们的字符串表示也应该相等。
于 2012-11-26T12:53:10.177 回答
0

您应该为整个应用程序中的所有 ToString 方法使用统一且可重用的解决方案。手动编写通用 ToStringHelper 代码或使用外部库,例如 stateprinter 项目https://github.com/kbilsted/StatePrinter项目

于 2014-09-01T21:38:36.403 回答
0

这里有一些指导:

http://msdn.microsoft.com/en-us/library/ms173154(v=vs.80).aspx

我认为这很大程度上取决于该类的用途。例如,如果它是面向显示的,那么返回需要与可能最终看到它的用户相关。

于 2012-11-26T12:50:45.193 回答