Ответ 1
Да, вы можете использовать любой метод вне свойств так же, как обычно.
[DebuggerDisplay("Foo: Address value is {Address.ToString(\"<formatting>\"}")]
- пример
Я хочу применить 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.
Спасибо заранее!
Да, вы можете использовать любой метод вне свойств так же, как обычно.
[DebuggerDisplay("Foo: Address value is {Address.ToString(\"<formatting>\"}")]
- пример
Там совет, рекомендуемый 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); }
}
}
Я считаю этот способ более читабельным.
Если вы хотите просмотреть значения в шестнадцатеричном формате, в Visual Studio есть опция для отображения значений в этом формате. Во время отладки наведите указатель мыши на свою переменную, чтобы отобразить дисплей отладки, или найдите переменную в окне часов или локальных жителей. Щелкните правой кнопкой мыши на переменной и выберите опцию "Шестнадцатеричный дисплей". Затем отладчик отобразит все числовые значения в шестнадцатеричном формате. В этом случае вы получите: "Foo: значение адреса 0x0000abcd"
К сожалению, я не мог понять, как реально управлять форматом строки, отображаемой атрибутом DebuggerDisplay, как вы просили.