簡體   English   中英

何時使用 DebuggerDisplayAttribute

[英]When to use DebuggerDisplayAttribute

DebuggerDisplayAttribute有哪些最佳實踐? 是什么指導您決定何時以及如何將屬性應用於您的代碼? 例如..

  1. 您是否發現DebuggerDisplayAttribute對於某些類型的對象(即自定義數據結構)比其他對象更有用?
  2. 您是在公共類型、內部類型還是兩者上定義它?
  3. 您通常會將它添加到初始實現中,還是等待測試人員/用戶請求它?
  4. 什么時候定義DebuggerDisplayAttribute更好,什么時候覆蓋.ToString()更有意義?
  5. 您是否有關於在屬性中公開多少數據或要包含的計算量限制的指南?
  6. 是否適用任何繼承規則,使其更有益於應用於基類?
  7. 在決定何時或如何使用它時,還有什么要考慮的嗎?

這是主觀的,我不願說有任何最佳實踐,但是:

  1. 您是否發現 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 屬性最佳實踐

使用 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM