現在の状態
2 つのクラスを持つ:
[DebuggerDisplay(@"One = {One}, two = {Two}")]
public class A
{
public int One { get; set; }
public B Two { get; set; }
}
[DebuggerDisplay(@"Three = {Three}")]
public class B
{
public int Three { get; set; }
}
それらを使用して:
var a = new A {One = 5, Two = new B {Three = 10}};
デバッガ内で表示されるツールチップ値a
は
1 = 5、2 = {DebuggerDisplayTest.B}
ゴール
私が欲しいのは次のようなものです
1 = 5、2 = '3 = 10'
ToString()
これは、 classのメソッドをオーバーライドすることで実現できることを知っていますB
。私は自分のアプリケーションでデバッグ専用のコードを書いているので、これは正しくないと感じています。
また、次のような文字列を使用することも知っています
[DebuggerDisplay(@"One = {One}, two = 'Three = {Two.Three}'")]
もうまくいくでしょう。A
classには class の知識が必要になるため、これも私には適切ではありませんB
。
DebuggerDisplay
typeの値をB
class のその型のインスタンスに「注入」する方法がもっと欲しいA
です。
質問
「has-a」複合クラスの属性DebuggerDisplay
内のメンバーの属性にアクセスすることは何とか可能ですか?DebuggerDisplay
アップデート
おそらく、この SO answerに従って、私の要件は不可能です。おそらく良い解決策はToString
、クラスB
でオーバーライドしていくつかのことを行い、プロパティif..else
を使用してデバッガ内でのみ異なる動作をすることです。Debugger.IsAttached
何かのようなもの:
[DebuggerDisplay(@"Three = {Three}")]
public class B
{
public int Three { get; set; }
public override string ToString()
{
if (Debugger.IsAttached)
{
return string.Format(@"Three = {0}", Three);
}
else
{
return base.ToString();
}
}
}