デバッグモードで自分の制御下にあるクラスに対してToString()を表示させたいのですが。
マウスで変数にカーソルを合わせると、これが最初に表示されると便利です。これには属性がありますか?
デバッグモードで自分の制御下にあるクラスに対してToString()を表示させたいのですが。
マウスで変数にカーソルを合わせると、これが最初に表示されると便利です。これには属性がありますか?
クラスにマークを付ける
[System.Diagnostics.DebuggerDisplay("{ToString()}")]
テスト:
[System.Diagnostics.DebuggerDisplay("{ToString()}")]
class MyClass
{
private string _foo = "This is the text that will be displayed at debugging"
public override string ToString()
{
return _foo;
}
}
これで、マウスで変数にカーソルを合わせると、が表示されThis is the text that will be displayed at debuggingます。
DebuggerDisplayAttributeディスプレイに影響を与えることができるものがあります。かなり複雑な式を記述してデバッグ出力を生成できますが、そうすることはお勧めしません。
ただし、オーバーライドToStringした場合、デバッガーはデフォルトでそれを表示するように文書化されています。たぶん、コードに何か問題がありますか?
の出力はToString、デバッグ時に表示されるデフォルトである必要があります。
DebuggerDisplay属性を使用してオーバーライドできます( MSDNを参照)。
ToStringログファイルへの書き込みにも役立つため、メソッドをオーバーライドする方が簡単で用途が広いので、このメソッドをオーバーライドすることをお勧めします。
どのような出力が表示されますか?タイプ名を取得すると、デフォルトが表示されますToString。
同様の問題がありました。私のクラスにはToString()オーバーライドがありましたが、それでもVSに表示されませんでした。これは奇妙なことでした。
属性[System.Diagnostics.DebuggerDisplay( "{ToString()}")]をクラスに追加すると、ToStringが表示されるはずのVisualStudioデバッガーで例外が表示されました。実装でstring.Format()を誤って使用するというバグがあったことが判明しました。これは興味深い動作です。例外が発生した場合、VSはデフォルトのToStringに戻ります。上記の属性を使用すると、ディスプレイにメソッドの出力(有効または例外)が表示されます。これは、ToString()のデバッグに非常に役立ちます。それ以外の場合、何らかの理由でこの動作をオフにしたい場合を除いて、クラスではデフォルトでこの属性がオンになっているため、この属性を各クラスに明示的に追加しても意味がありません。
あなたが探しているのはDebuggerDisplayAttribute:
http://www.codeproject.com/Articles/117477/Using-DebuggerDisplayAttribute
上記のリンクを使用して、それがどのように行われるかを確認してから、ToString()メソッドを使用して表示されているものを駆動し、これをクラスに適用します。私はこれまでプロパティのみを使用しましたが、クラスを挿入できるかどうかはわかりません。
オブジェクト内で次のように.ToStringをオーバーライドします。
public class MyObject
{
public int Property1{ get; set; }
public string Property2{ get; set; }
public string Property3 { get; set; }
public override string ToString()
{
return Property3;
}
}
これにより、Property3がToString()値として返されます
Visual Studioを使用している場合は、yourvariable.ToString()行にwatch @ runtimeを追加できます。これは、ブレークポイントに到達したときに画面の下部に表示されます。