ToString的约定

时间:2012-11-26 12:47:17

标签: c# tostring conventions

ToString()覆盖的约定是什么?相关课程既有Name属性,又有Id

7 个答案:

答案 0 :(得分:5)

做你需要做的事。没有任何惯例,因为有时会覆盖.Equals().GetHashCode()之类的内容。

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

答案 1 :(得分:1)

我不知道任何惯例。我通常会在文本语境中打印出合适的内容。 Id可能适用于您的上下文。

我的经验法则是,ToString应该显示两个对象是否为Equals

答案 2 :(得分:1)

据我所知,ToString()的约定与对象上的其他2个可覆盖方法的约定有内在联系 - GetHashCodeEquals

也就是说当Equals返回true时,GetHashCode应生成相同的哈希码。为了补充一点,我想说当Equals返回true时,ToString应返回相同的字符串。

答案 3 :(得分:1)

我认为ToString()的实施应该牢记三件事:

  • 字符串表示应该是人类可读的,例如您可以将它用于日志/控制台输出,例如 DebuggerDisplay 属性。
  • 如果您的班级中有任何Parse方法,则应该能够解析ToString来电的结果。此外,myInstance.Equals(MyClass.Parse(myInstance.ToString()))应评估为true
  • 如果两个实例相等,则它们的字符串表示也应相等。

答案 4 :(得分:1)

您可以参考以下链接

Overriding System.Object.ToString() and Implementing IFormattable

Demystifying C# Programming's ToString Method

How To: Override the ToString Method

我的经验法则
1.它应与EqualsGetHashCode同步 2.它应与Parse方法同步(如果我提供)
3.如果需要自定义格式,请使用IFormattable

答案 5 :(得分:0)

这里有一些指导:

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

我认为这个课程的目的是如何使用。例如,如果它以面向方式显示,那么返回需要与可能最终看到它的用户相关。

答案 6 :(得分:0)

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