![](/img/trans.png)
[英]DebuggerDisplayAttribute - How does it choose the language when evaluating expressions?
[英]When to use DebuggerDisplayAttribute
DebuggerDisplayAttribute有哪些最佳實踐? 是什么指導您決定何時以及如何將屬性應用於您的代碼? 例如..
DebuggerDisplayAttribute
對於某些類型的對象(即自定義數據結構)比其他對象更有用?DebuggerDisplayAttribute
更好,什么時候覆蓋.ToString()
更有意義?這是主觀的,我不願說有任何最佳實踐,但是:
- 您是否發現 DebuggerDisplayAttribute 對於某些類型的對象(即自定義數據結構)比其他對象更有用?
到目前為止,最常見的用途是表示業務實體的類型——我通常會顯示 ID + 名稱。 還有將存儲在應用程序集合中的任何類型。
除此之外,每當我發現自己經常在調試器中搜索屬性時,我都會添加它。
2.你是在公共類型、內部類型還是兩者上定義它?
兩個都。
3.你一般會把它添加到初始實現中,還是等待測試人員/用戶請求它?
測試人員/用戶永遠不會看到它——它只在調試時使用。
4. 什么時候定義 DebuggerDisplayAttribute 更好,什么時候定義 override.ToString() 更有意義?
當您想要在運行時表示時覆蓋 ToString() ,用於日志記錄或特定於應用程序的目的。 如果您只需要調試它,請使用 DebuggerDisplayAttribute。
5.對於在屬性中公開多少數據,或者要包含的計算量有限制,你有指導方針嗎?
由於它不在運行時使用,唯一的限制是它應該足夠快而不妨礙調試體驗(尤其是在為集合的元素多次調用時)。
您無需像使用運行時日志記錄那樣擔心暴露敏感數據(例如通過覆蓋.ToString),因為此類數據無論如何在調試器中都是可見的。
6.是否應用了任何繼承規則,使其更有益於應用於基類?
不,將其應用於您需要的課程。
7.在決定何時或如何使用時,還有什么需要考慮的嗎?
我想不出別的了。
沒有DebuggerDisplay
屬性的調試模式
使用DebuggerDisplay
屬性的調試模式
[DebuggerDisplay("{Name,nq}")]//nq suffix means no quotes
public class Product {
public int Id { get; set; }
public string Name { get; set; }
//Other members of Northwind.Product
}
使用 DebuggerDisplay 屬性告訴調試器要顯示什么(C#、Visual Basic、F#、C++/CLI)
Visual Studio 2019 中的調試器/診斷提示和技巧
雖然屬性很老,但你應該看看掌聲和解說員的反應:) 順便說一下,如果你想看更多的調試技巧,你可能想在空閑時間看看這個演示。
當我知道代碼部分需要大量調試時,我會經常使用它。 它可以在調試器中瀏覽對象時節省一些時間,尤其是當您使用像"{ChildCollection.Count}"
這樣的表達式時。 它使您可以快速了解正在查看的數據。
我幾乎總是把它放在最終會出現在集合中的類中,這樣就可以非常快速地查看每個項目,而不僅僅是一堆您必須展開的 MyNamespace.MyClass 元素。
我的意見是ToString()
用於提供數據的最終用戶表示。 DebuggerDisplay 適用於開發人員,您可以決定顯示元素 ID、一些額外的內部/私有屬性。
有趣的是你應該問,JaredPar剛剛做了一篇非常好的博客文章,名為DebuggerDisplay屬性最佳實踐 。
DebuggerDisplay
對任何沒有有意義的.ToString()
實現的類都有價值,但我個人還沒有看到有人主動編寫屬性,直到需要它們為止。
總的來說, Omer 與最佳實踐的鏈接看起來像是合理的建議; 但是,我個人會放棄使用專用DebuggerDisplay()
方法的建議——盡管它是私有的,但除了刪除魔術字符串之外,它似乎沒有提供比該屬性更多的好處。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.