最佳做法:属性,函数还是ToString?

时间:2018-12-03 21:52:48

标签: c# tostring readability maintainability

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

假设我们有以下内容:

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

并且我们希望能够获得用于调试目的的类的字符串表示形式。关于代码的可读性/可维护性和最佳实践,我正在评估三个选项

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

从编译器的角度来看,大多数选项都非常相似-但是出于可读性/可维护性,是否有客观原因偏爱任何特定选项?还是个人喜好?

使用示例:

// 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);

3 个答案:

答案 0 :(得分:1)

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

为什么?因为当您使用VisualStudio单步执行代码时,将鼠标悬停在变量上或将变量放在监视窗口中时,VS会轻松显示ToString()结果。否则,您必须深入研究以获得您所关注的财产。如果您使用列表/枚举/等,这可能会特别烦人。

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

非常感谢您的所有评论。

我在你们大多数人的行列中:使用ToString(),很高兴知道我并不孤单。但是最后,看来我们将“保存”它以备以后记录。

@LarsTech:非常感谢您提供的版本;)