最佳实践:属性、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 和最佳实践,我正在评估三个选项
- 内联属性
- 自定义方法
- 覆盖 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:感谢版主,清晰多了;)
我正在尝试确定编写代码以获取自定义 class 的字符串表示形式时的最佳做法。
假设我们有以下内容:
public class DoubleParameter
{
public double Value { get; set; }
public string Description { get; set; }
public string Units { get; set; }
}
并且我们希望能够获取 class 的字符串表示形式以进行调试。关于代码 readability/maintainability 和最佳实践,我正在评估三个选项
- 内联属性
- 自定义方法
- 覆盖 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:感谢版主,清晰多了;)