有効な式なら何でも使用できます。
ただし、デバッガーはこれらの式を頻繁に評価するため、式を複雑にするほど、デバッグ速度の低下に気付くようになります(コードをステップ実行する場合など)。
考慮すべきもう1つの重要な点は、式がクラスを使用する言語のデバッガーによって評価されることです。クラスとそのすべての潜在的なユーザーの両方がC#である場合、問題はなく、三項演算子などを使用できます。ただし、クラスが別の言語からも使用される場合は、次のようにします。
- デバッガーが[DebuggerDisplay]属性を使用するという保証はありません。
- 含まれている場合、{expression}ブロックを評価しようとする保証はありません。
- 何か凝ったことを始めた場合(?:)を使用し始めると、C#式の評価に失敗する可能性が非常に高くなります。
最も安全なのは、プライベートプロパティを追加してデバッガーの値を計算することです。
[DebuggerDisplay("{DebugValue,nq}")]
public class FileWrapper {
public string FileName { get; set; }
public bool IsTempFile { get; set; }
public string TempFileName { get; set; }
private string DebugValue {
get {
var text = string.Format("{0}: FileName={1}", this.GetType(), this.FileName);
if (this.IsTempFile)
text += string.Format(", TempFileName={0}", this.TempFileName);
return text;
}
}
}
これは私有財産であるため、潜在的なサブクラスの邪魔になりません。