久しぶりの小ネタ。
DebuggerDisplay属性とは
この属性を付与すると、デバッグ時のオブジェクトの表示内容が制御できます。
意外と知られていないのか、いちいち付与するのが面倒なのか分かりませんが
個人的にはあまりお目にかかったことはなかったり。データクラスに対して
付与しておくと、結構地味に便利です。
使い方
以下のようにします。
/// <summary> /// DebuggerDisplay属性を付与したクラス /// </summary> [DebuggerDisplay("{Id}: Name={Name}, Value={Value}")] private class WithDebuggerDisplayAttr { public int Id { get; set; } public string Name { get; set; } public string Value { get; set; } }
属性のコンストラクタに、表示したい内容の文字列を渡します。
クラス自身のプロパティが指定できるので、ここでログメッセージのように
分かりやすい内容で書式化しておきます。
サンプル
以下、サンプルです。
using System; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using TryCSharp.Common; // ReSharper disable MemberCanBePrivate.Local namespace TryCSharp.Samples.Advanced { /// <summary> /// DebuggerDisplay属性についてのサンプルです。 /// </summary> [SuppressMessage("ReSharper", "HeapView.BoxingAllocation")] public class DebuggerDisplayAttributeSamples01 : IExecutable { public void Execute() { var rnd = new Random(); // -------------------------------------------------------- // このクラスには DebuggerDisplay属性を付与している // ので、デバッグ時に属性に指定した内容が表示される // -------------------------------------------------------- var data01 = new WithDebuggerDisplayAttr { Id = 1, Name = $"Name-{rnd.Next()}", Value = $"Val-{rnd.Next()}" }; // -------------------------------------------------------- // このクラスには DebuggerDisplay属性を付与していない // ので、デバッグ時に通常通りFQCNが表示される // -------------------------------------------------------- var data02 = new WithoutDebuggerDisplayAttr { Id = 2, Name = $"Name-{rnd.Next()}", Value = $"Val-{rnd.Next()}" }; Output.WriteLine(data01); Output.WriteLine(data02); } /// <summary> /// DebuggerDisplay属性を付与したクラス /// </summary> [DebuggerDisplay("{Id}: Name={Name}, Value={Value}")] private class WithDebuggerDisplayAttr { public int Id { get; set; } public string Name { get; set; } public string Value { get; set; } } /// <summary> /// DebuggerDisplay属性を付与していないクラス /// </summary> private class WithoutDebuggerDisplayAttr { public int Id { get; set; } public string Name { get; set; } public string Value { get; set; } } } }
結果
デバッガで見ると、以下の画像のように指定した書式化文字列状態で表示されます。
ソースコード
ソースコードは以下の場所で見れます。
参考情報
https://msdn.microsoft.com/ja-jp/library/system.diagnostics.debuggerdisplayattribute(v=vs.110).aspx
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場