7

DebuggerDisplayAttributeに関するいくつかのベストプラクティスは何ですか?いつ、どのように属性をコードに適用するかについての決定を導くものは何ですか?例えば..

  1. DebuggerDisplayAttribute一部のタイプのオブジェクト(つまり、カスタムデータ構造)では、他のオブジェクトよりも便利だと思いますか?
  2. パブリックタイプ、内部タイプ、またはその両方で定義しますか?
  3. 通常、最初の実装に追加しますか、それともテスター/ユーザーが要求するのを待ちますか?
  4. いつ定義するのが良いですかDebuggerDisplayAttribute、そしていつオーバーライドする方が理にかなっています.ToString()か?
  5. 属性で公開するデータの量に関するガイドライン、または含める計算量の制限はありますか?
  6. 基本クラスに適用する方が有益な継承ルールが適用されますか?
  7. いつ、どのように使用するかを決める際に考慮すべきことは他にありますか?
4

4 に答える 4

8

これは主観的なものであり、ベストプラクティスがあるとは言いませんが、次のようになります。

  1. DebuggerDisplayAttributeは、他のタイプのオブジェクトよりも一部のタイプのオブジェクト(つまり、カスタムデータ構造)でより便利だと思いますか?

最も一般的な使用法は、ビジネスエンティティを表すタイプです。通常、ID+名前を表示します。また、アプリケーションのコレクションに格納されるすべてのタイプ。

それ以外は、デバッガーでプロパティを頻繁に検索していることに気付いたときに追加します。

2.パブリックタイプ、内部タイプ、またはその両方で定義しますか?

両方。

3.通常、最初の実装に追加しますか、それともテスター/ユーザーが要求するのを待ちますか?

テスター/ユーザーには表示されません。デバッグ中にのみ使用されます。

4. DebuggerDisplayAttributeを定義する方がよいのはいつですか。また、.ToString()をオーバーライドする方が理にかなっているのはいつですか。

ロギングまたはアプリケーション固有の目的で、実行時に表現が必要な場合は、ToString()をオーバーライドします。デバッグにのみ必要な場合は、DebuggerDisplayAttributeを使用します。

5.属性で公開するデータの量に関するガイドライン、または含める計算量の制限はありますか?

実行時に使用されないため、唯一の制約は、デバッグエクスペリエンスを妨げないように十分に高速である必要があることです(特に、コレクションの要素に対して複数回呼び出される場合)。

ランタイムロギングの場合のように(たとえば、.ToStringをオーバーライドすることによって)機密データを公開することを心配する必要はありません。そのようなデータはデバッガーでとにかく表示されるためです。

6.基本クラスに適用する方が有益な継承ルールが適用されますか?

いいえ、必要なクラスに適用してください。

7.いつ、どのように使用するかを決める際に考慮すべきことは他にありますか?

他に考えられることはありません。

于 2011-04-07T05:54:33.937 に答える
6

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)を使用して何を表示するかをデバッガーに指示します

VisualStudio2019のデバッガー/診断のヒントとコツ

属性はかなり古いですが、ナレーターの拍手と反応を見る必要があります:)ちなみに、デバッガーのトリックをもっと見たい場合は、自由時間にこのデモを完全に見たいと思うかもしれません。

于 2020-07-28T12:52:51.990 に答える
2

コードセクションで多くのデバッグが必要になることがわかっている場合は、これをよく使用します。特に。のような式を使用している場合は、デバッガーでオブジェクトを参照するときに時間を節約できます"{ChildCollection.Count}"。それはあなたが見ているデータの素早いアイデアをあなたに与えます。

ほとんどの場合、コレクションに含まれるクラスに配置するため、展開する必要のあるMyNamespace.MyClass要素の束だけでなく、各アイテムをすばやく確認できます。

私の意見ではToString()、データのエンドユーザー表現を提供するために使用されます。DebuggerDisplayは開発者向けであり、要素ID、いくつかの追加の内部/プライベートプロパティを表示することを決定できます。

于 2011-04-07T05:42:26.227 に答える
-1

DebuggerDisplay意味のある実装がないクラスには価値がありますが、.ToString()個人的には、必要になるまで属性を積極的に作成する人を見たことがありません。

一般に、Omerのベストプラクティスへのリンクは適切なアドバイスのように見えます。しかし、私は個人的に、専用の方法を使用するという提案から離れてDebuggerDisplay()いました。それはプライベートですが、マジックストリングを削除することを除けば、属性に比べてほとんどメリットがないようです。

于 2011-04-07T13:19:46.947 に答える