我正在尝试确定在编写代码以获得自定义类的字符串表示时的最佳实践。
假设我们有以下内容:
public class DoubleParameter
{
public double Value { get; set; }
public string Description { get; set; }
public string Units { get; set; }
}
我们希望能够获得用于调试目的的类的字符串表示形式。关于代码可读性/可维护性和最佳实践,我正在评估的三个选项
- 内联属性
- 自定义方法
- 重写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);
出于调试目的,ToString((轻而易举地获胜。
为什么?因为当您使用VisualStudio遍历代码时,当您将鼠标悬停在某个变量上或将该变量放在监视窗口中时,VS将很容易显示ToString((结果。否则,你必须挖进去才能得到你关心的财产。如果你使用列表/枚举等,这可能会特别烦人。
此外,ToString((已经存在,并且已经假定是对象实例的文本表示。这就是它的全部意义。为什么要添加另一个属性,也对象的字符串表示?
我建议您将属性设置为私有属性,并在内部将其用作属性[DeggerDisplayAttribute]的值,如
[DebuggerDisplay("{ReadableValue},nq")]
public class DoubleParameter
{
private string ReadableValue { get; }
}
非常感谢您的评论。
我和你们大多数人一样:使用ToString()
,很高兴知道我并不孤单。但最终,我们似乎要"保存"它,以便以后进行日志记录。
@LarsTech:谢谢你的版本,更清晰;(