DebuggerDisplay 屬性
新增 DebuggerDisplay
屬性將改變偵錯程式在懸停時顯示類的方式。
偵錯程式將評估包含在 {}
中的表示式。這可以是一個簡單的屬性,如下面的示例或更復雜的邏輯。
[DebuggerDisplay("{StringProperty} - {IntProperty}")]
public class AnObject
{
public int ObjectId { get; set; }
public string StringProperty { get; set; }
public int IntProperty { get; set; }
}
在結束括號之前新增 ,nq
會在輸出字串時刪除引號。
[DebuggerDisplay("{StringProperty,nq} - {IntProperty}")]
即使在 {}
中允許使用通用表示式,也不建議使用。DebuggerDisplay
屬性將作為字串寫入程式集後設資料。{}
中的表示式未進行有效性檢查。因此,包含比一些簡單演算法更復雜的邏輯的 DebuggerDisplay
屬性在 C#中可能正常工作,但在 VB.NET 中評估的相同表示式可能在語法上無效並且在除錯時產生錯誤。
讓 DebuggerDisplay
更加語言不可知的一種方法是在方法或屬性中編寫表示式,然後呼叫它。
[DebuggerDisplay("{DebuggerDisplay(),nq}")]
public class AnObject
{
public int ObjectId { get; set; }
public string StringProperty { get; set; }
public int IntProperty { get; set; }
private string DebuggerDisplay()
{
return $"{StringProperty} - {IntProperty}"";
}
}
有人可能希望 DebuggerDisplay
輸出全部或部分屬性,並在除錯和檢查物件的型別時。
下面的示例還包含使用 #if DEBUG
的輔助方法,因為 DebuggerDisplay
用於除錯環境。
[DebuggerDisplay("{DebuggerDisplay(),nq}")]
public class AnObject
{
public int ObjectId { get; set; }
public string StringProperty { get; set; }
public int IntProperty { get; set; }
#if DEBUG
private string DebuggerDisplay()
{
return
$"ObjectId:{this.ObjectId}, StringProperty:{this.StringProperty}, Type:{this.GetType()}";
}
#endif
}