DebuggerDisplayAttribute

DebuggerDisplayAttribute

我有许多用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/

10-10 14:38