雪国の技術的な夏

プログラミング的な話や特定のツール設定の話など。 ※ただし変態に限る。

(.NET)DebuggerDisplayの件

サンプル

[DebuggerDisplay("Id={ID}, Name={Name,nq}")]
public sealed class MyClass
{
    public int ID{ get; set; }

    public string Name { get; set; }

#if DEBUG
    public override string ToString()
    {
        return "ID=" + ID.ToString() + ", Nm=" + Name;
    }
#endif
}

Debugする分には優秀だが、
(スレッド同期などの関係でストップせずに一連で)ログに出したい際などは
ログに出てくれないので、
結局は ToString() をoverrideし、 #if DEBUG で囲むのが総合的に最適と思われる。
メソッド名/プロパティ名とか変わる際に(文字列定義なので)自動変更の対象外になっちゃうので。

ただし意図的に ToString() の実装が必要な場合は仕方がないのかなと。
その場合は ToString2() を #if DEBUG で囲んで実装すればいいや。DEBUGだし、いいや。