我试图确定最佳实践,当编写代码来获取自定义类的字符串表示形式时。
想象一下,我们有以下内容:
public class DoubleParameter
{
public double Value { get; set; }
public string Description { get; set; }
public string Units { get; set; }
}
而且我们希望能够获得用于调试目的的类的字符串表示形式。 关于代码的可读性/可维护性和最佳实践,我正在评估三个选项
从编译器的角度来看,其中大多数都非常相似-但是出于可读性/可维护性,是否有客观的原因偏爱任何特定选项? 还是个人喜好?
使用示例:
// 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单步执行代码时,将鼠标悬停在变量上或将变量放在监视窗口中时,VS会轻松显示ToString()结果。 否则,您必须深入研究以获得您所关注的财产。 如果使用列表/枚举/等,这可能会特别令人讨厌。
另外,ToString()已经存在,并且应该已经是对象实例的文本表示形式。 这就是重点。 为什么还要添加另一个也是对象的字符串表示形式的属性?
我建议您将属性设为私有,并在内部将其用作属性[DebuggerDisplayAttribute]的值,如下所示
[DebuggerDisplay("{ReadableValue},nq")] public class DoubleParameter { private string ReadableValue { get; } }
非常感谢您的所有评论。
我在大多数人的支持下使用ToString()
,很高兴知道我并不孤单。 但最后,似乎我们将“保存”它以供以后记录。
@LarsTech:感谢您提供的版本,更加清晰;)