可以在DebuggerDisplay显示的文本中使用字符串格式吗?

EFr*_*ank 13 .net c# debugging visual-studio

我想应用DebuggerDisplayAttribute包括内存地址值.有没有办法让它以十六进制显示?

[DebuggerDisplay("Foo: Address value is {Address}")] 
class Foo 
{
    System.IntPtr m_Address = new System.IntPtr(43981); // Sample value


    System.IntPtr Address
    {
         get { return m_Address; }
    }
} 
Run Code Online (Sandbox Code Playgroud)

这将显示: Foo: Address value is 43981 相反,我希望值以十六进制显示,如下所示:Foo: Address value is 0xABCD.

我知道我可以通过覆盖来应用各种格式ToString(),但我很好奇是否可以使用DebuggerDisplayAttributes.

提前致谢!

Dav*_*vid 23

是的,您可以像平常一样使用属性中的任何方法. [DebuggerDisplay("Foo: Address value is {Address.ToString(\"<formatting>\"}")] 就是一个例子

http://msdn.microsoft.com/en-us/library/x810d419.aspx


Car*_*din 10

有一个建议由https://blogs.msdn.microsoft.com/jaredpar/2011/03/18/debuggerdisplay-attribute-best-practices/

基本上,创建私人财产,比方说DebugDisplay.让属性返回您选择的格式化字符串.然后只需在DebuggerDisplay属性中使用新的私有属性.

例如

[DebuggerDisplay("{DebugDisplay,nq}")]
public sealed class Student {
    public string FirstName { get; set; }
    public string LastName { get; set; }
    private string DebugDisplay {
        get { return string.Format("Student: {0} {1}", FirstName, LastName); }
    }
}
Run Code Online (Sandbox Code Playgroud)

我发现这种方式更具可读性.