我有许多用DebuggerDisplayAttribute装饰的类。
我希望能够将跟踪语句添加到将显示这些类的实例的单元测试中。
.NET Framework中是否存在一种方法,该方法将显示使用DebuggerDisplayAttribute格式化的对象(如果未定义DebuggerDisplayAttribute,则退回到使用.ToString())?
编辑
为了明确起见,我希望框架中可能包含一些内容。我知道我可以从DebuggerDisplayAttribute获取Value属性,但是随后我需要使用DebuggerDisplayAttribute.Value表示的格式字符串来格式化我的实例。
如果我自己动手,我会设想一种扩展方法,大致如下:
public string FormatDebugDisplay(this object value)
{
DebugDisplayAttribute attribute = ... get the attribute for value ...
if (attribute = null) return value.ToString();
string formatString = attribute.Value;
??? How do I format value using formatString ???
return SomeFormatMethod(formatString, value);
}
最佳答案
可能不错-但是DebuggerDisplayAttribute的格式字符串是由调试器评估的,就像评估您在“监视”窗口或“即时”窗口中键入的表达式的方式一样。这就是为什么您可以在括号内放置任意表达式,例如{FirstName + " " + LastName}
的原因。
因此,要在代码中评估这些内容,您需要将Visual Studio调试器嵌入到您的应用程序中。可能不会发生。 (笑)
最好的选择可能是采用DebuggerDisplay格式字符串中当前存在的所有格式化逻辑,并将其用作方法。然后,您可以从代码中自由调用该方法。您的DebuggerDisplay属性最终只会执行方法,而不会执行任何操作。
[DebuggerDisplay("{Inspect()}")]
public class MyClass {
public string Inspect() { ... }
}
关于.net - 是否存在使用DebuggerDisplayAttribute呈现对象的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2793965/