現在の状態
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}'")]
もうまくいくでしょう。Aclassには class の知識が必要になるため、これも私には適切ではありませんB。
DebuggerDisplaytypeの値をBclass のその型のインスタンスに「注入」する方法がもっと欲しい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();
}
}
}
