我在尋找一個很好的具體例子,明確需要用ToString()
來替代某些東西,但要使用[DebuggerDisplay(...)]
定製屬性在調試器中顯示其他東西?[DebuggerDisplay(...)]屬性有用的示例?
回答
舉例說,一個二叉樹的節點對象。
ToString()
只想顯示該節點的有效載荷,而DebuggerDisplay
也可能會顯示它指向哪個節點。
假設您有一個現有的應用程序,其中.ToString()預計將序列化爲字符串。這不是一個好主意,但是假設你處於這種情況。然後,您仍然可以使用[DebuggerDisplay(...)]讓您的生活更輕鬆,而不需要修改該類和應用程序其餘部分之間的這種合同(雖然不好,但我懷疑這不是罕見的)。
您可以添加也注意ToString()沒有被VB.NET中的調試器評估。所以如果你打算用幾種語言開發,習慣這個屬性是一個好主意。這是MSDN頁面上說:https://msdn.microsoft.com/en-us/library/x810d419.aspx
無論調試器評估這種隱含的ToString()調用依賴於工具/選項/調試對話框的用戶設置。 Visual Basic不實現這個隱式的ToString()評估。
我更喜歡在ToString上使用這個屬性,因爲假設我不需要使用ToString()方法來完成其他任何事情,我不喜歡讓方法坐在那裏的想法。
如果您需要其他原因,我認爲使用聲明式方法更有意義,因爲調試器顯示字符串只是一些元數據,它也可以被其他工具使用。
這實際上是不正確的。如果沒有'[DebuggerDisplay(...)]'屬性存在。調試器*會*評估'ToString()'。 – Timwi 2017-03-21 16:50:40
@Timwi:截止到2015年,它在MSDN頁面上聲明。沒有關於VS 2017的信息。我已經在我的回答中澄清了這一點。 – 2017-03-21 18:27:42
Lazy in .NET4使用它在調試中顯示重要的屬性:
[Serializable,
DebuggerDisplay("ThreadSafetyMode={Mode}, IsValueCreated={IsValueCreated}, IsValueFaulted={IsValueFaulted}, Value={ValueForDebugDisplay}"),
DebuggerTypeProxy(typeof(System_LazyDebugView<>)), ComVisible(false), HostProtection(SecurityAction.LinkDemand, Synchronization=true, ExternalThreading=true)]
public class Lazy<T>
{
...
}
ArrayList也使用:
[Serializable, ComVisible(true), DebuggerTypeProxy(typeof(ArrayListDebugView)),
DebuggerDisplay("Count = {Count}")]
public class ArrayList : IList, ICollection, IEnumerable, ICloneable
{
...
}
[Serializable, StructLayout(LayoutKind.Sequential), TypeConverter(typeof(ColorConverter)),
DebuggerDisplay("{NameAndARGBValue}"),
Editor("System.Drawing.Design.ColorEditor, System.Drawing.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
public struct Color
{
...
}
您可以使用.NET Reflector工具查看它。
我想OP是問爲什麼在ToString方法中有一些不同的東西是有用的。 – 2010-09-14 13:22:26
- 1. DebuggerDisplay屬性不起作用
- 2. 如何使用DebuggerDisplay屬性表示一個位掩碼
- 3. DebuggerDisplay屬性不能按預期工作!
- 4. 可能訪問屬性的子「DebuggerDisplay」屬性?
- 5. 我如何使用DebuggerDisplay屬性上的索引類
- 6. DebuggerDisplay屬性可以應用於一個不具有的類型嗎?
- 7. 在[DebuggerDisplay]中使用擴展方法屬性
- 8. wxpython:'示例'對象沒有屬性'OnClick'
- 9. 使用屬性編輯器(ControlsFX)的屬性表示例
- 10. 當我們必須使用DebuggerDisplay屬性?使用這個的優點是什麼?
- 11. 所有struts2標籤的每個屬性用法示例
- 12. Java屬性文件:空屬性值的有用例子?
- 13. DebuggerDisplay忽略的展示項目
- 14. Python:實例沒有屬性
- 15. 實例沒有屬性'sock'
- 16. 實例沒有屬性
- 17. 無關屬性的解釋示例
- 18. urwid示例中屬性的含義
- 19. 靈活屬性的用例
- 20. 帶有實例的屬性的必需屬性
- 21. 屬性錯誤:HelloWorld的實例沒有屬性的主
- 22. 如何獲取標有屬性的屬性的實例值?
- 23. debuggerdisplay不按預期顯示字段值
- 24. 帶有附加屬性的Javascript函數示例
- 25. 有關依賴項屬性示例的問題
- 26. 屬性屬性 - 強大還是複製示例?
- 27. AttributeError的:XX實例沒有屬性 'INTITLE'
- 28. AttributeError的:ObjectT實例沒有屬性 '__getitem__'
- 29. 覆蓋的實例屬性有條件
- 30. AttributeError的:EchoFactory實例沒有屬性「DOSTART」
XElement.ToString()是一個類似的情況。儘管在調試器中查看XML大概是你想要的。 – 2010-09-13 19:05:02