Kee*_*ker 20 .net c# debugging debuggerdisplay
考虑以下课程:
[DebuggerDisplay("{GetType().Name,nq}: FileName = {FileName,nq}")]
public class FileWrapper
{
public string FileName { get; set; }
public bool IsTempFile { get; set; }
public string TempFileName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想基于IsTempFileName属性添加调试器显示.我想, TempFileName = {TempFileName,nq}在实例是临时文件时添加字符串.我将如何实现这一目标?
slo*_*oth 29
你可以使用条件运算符(?:)
[DebuggerDisplay("{GetType().Name,nq}: FileName = {FileName,nq}{IsTempFile ? \", TempFileName: \" + TempFileName : System.String.Empty,nq}")]
Run Code Online (Sandbox Code Playgroud)
IsTempFile == false
Run Code Online (Sandbox Code Playgroud)

IsTempFile == true
Run Code Online (Sandbox Code Playgroud)

您可以使用任何有效的表达式。
但是,请记住,调试器会对这些表达式进行大量计算,因此您使它们越复杂,您就越会注意到调试速度降低(例如,在单步执行代码时)。
另一个要考虑的主要事情是表达式由使用类的语言的调试器评估。如果该类及其所有潜在用户都使用 C#,则没有问题,您可以使用三元运算符之类的东西。但是,如果您的课程也用于其他语言,则:
最安全的做法是添加一个私有属性来计算调试器值:
[DebuggerDisplay("{DebugValue,nq}")]
public class FileWrapper {
public string FileName { get; set; }
public bool IsTempFile { get; set; }
public string TempFileName { get; set; }
private string DebugValue {
get {
var text = string.Format("{0}: FileName={1}", this.GetType(), this.FileName);
if (this.IsTempFile)
text += string.Format(", TempFileName={0}", this.TempFileName);
return text;
}
}
}
Run Code Online (Sandbox Code Playgroud)
它是私有财产,因此不会妨碍任何潜在的子类。
| 归档时间: |
|
| 查看次数: |
2238 次 |
| 最近记录: |