最佳实践:属性、Function 或 ToString?

Best practices: a Property, a Function or ToString?

我正在尝试确定编写代码以获取自定义 class 的字符串表示形式时的最佳做法。

假设我们有以下内容:

public class DoubleParameter
{
    public double Value { get; set; }
    public string Description { get; set; }
    public string Units { get; set; }
}

并且我们希望能够获取 class 的字符串表示形式以进行调试。关于代码 readability/maintainability 和最佳实践,我正在评估三个选项

  1. 内联属性
  2. 自定义方法
  3. 覆盖 ToString()

从编译器的角度来看,其中大部分非常相似 - 但是否有任何 objective 理由更喜欢 readability/maintainability 的任何特定选项?还是个人喜好问题?

使用示例:

// Option 1 - Inline Property
public string ReadableValue => 
    $"{this.Description} => {this.Value.ToString("F2")} ({this.Units})";
// example usage: Console.WriteLine(myVar.ReadableValue);

// Option 2 - Custom Method
public string ToReadable() =>
    $"{this.Description} => {this.Value.ToString("F2")} ({this.Units})";
// example usage: Console.WriteLine(myVar.ToReadable());

// Option 3 - Overriding ToString()
public override string ToString() =>
    $"{this.Description} => {this.Value.ToString("F2")} ({this.Units})";
// example usage: Console.WriteLine(myVar);

出于调试目的,ToString() 无疑胜出。

为什么?因为当您使用 VisualStudio 单步执行代码时,当您将鼠标悬停在变量上或将变量放入监视 window 时,VS 将轻松显示 ToString() 结果。否则,您必须深入研究才能获得您关心的 属性。如果您正在使用 lists/enumerations/etc.

,这可能会特别烦人

此外,ToString() 已经存在,并且已经应该 是对象实例的文本表示。这就是它的全部意义所在。为什么要添加另一个 属性,它是 也是 对象的字符串表示形式?

我建议您将 属性 设为私有并在内部将其用作属性 [DebuggerDisplayAttribute] 的值,如下所示

[DebuggerDisplay("{ReadableValue},nq")] public class DoubleParameter { private string ReadableValue { get; } }

非常感谢您的所有评论。

我和你们大多数人一样:使用 ToString() 很高兴知道我并不孤单。但最后,我们似乎要 'save' 它用于以后的日志记录目的。

@LarsTech:感谢版主,清晰多了;)