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

问题描述 投票:0回答:3

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

想象一下,我们有以下内容:

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);
c# tostring readability maintainability
3个回答
1
投票

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

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

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


1
投票

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

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


0
投票

非常感谢您的所有评论。

我在大多数人的支持下使用ToString() ,很高兴知道我并不孤单。 但最后,似乎我们将“保存”它以供以后记录。

@LarsTech:感谢您提供的版本,更加清晰;)

© www.soinside.com 2019 - 2024. All rights reserved.