Может ли форматирование строк использоваться в тексте, показанном с помощью DebuggerDisplay?

Я хочу применить 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; }
    }
} 

Это отобразит: Foo: Address value is 43981 Вместо этого я хотел бы, чтобы значение отображалось в шестнадцатеричном виде: Foo: Address value is 0xABCD.

Я знаю, что я могу применять все виды форматирования, переопределяя ToString(), но мне любопытно, если это возможно с помощью DebuggerDisplayAttributes.

Спасибо заранее!

Ответ 1

Да, вы можете использовать любой метод вне свойств так же, как обычно. [DebuggerDisplay("Foo: Address value is {Address.ToString(\"<formatting>\"}")] - пример

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

Ответ 2

Там совет, рекомендуемый 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); }
    }
}

Я считаю этот способ более читабельным.

Ответ 3

Если вы хотите просмотреть значения в шестнадцатеричном формате, в Visual Studio есть опция для отображения значений в этом формате. Во время отладки наведите указатель мыши на свою переменную, чтобы отобразить дисплей отладки, или найдите переменную в окне часов или локальных жителей. Щелкните правой кнопкой мыши на переменной и выберите опцию "Шестнадцатеричный дисплей". Затем отладчик отобразит все числовые значения в шестнадцатеричном формате. В этом случае вы получите: "Foo: значение адреса 0x0000abcd"

К сожалению, я не мог понять, как реально управлять форматом строки, отображаемой атрибутом DebuggerDisplay, как вы просили.