Możesz użyć dowolnego wyrażenia, które jest prawidłowe.
Należy jednak pamiętać, że debugger będzie często oceniał te wyrażenia, więc im bardziej skomplikowane, tym bardziej zaczniesz zauważać zmniejszoną prędkość debugowania (np. Podczas przechodzenia przez kod).
Inną ważną rzeczą, którą należy wziąć pod uwagę, jest to, że wyrażenie jest oceniane przez debugger dla języka używającego tej klasy. Jeśli zarówno klasa, jak i wszyscy jej potencjalni użytkownicy są w języku C#, nie ma problemu i można używać takich rzeczy, jak operator trójskładnikowy. Jednakże, jeśli klasa ma również zostać wykorzystane w innym języku, a następnie:
- nie ma gwarancji, debugger będzie nawet użyć [DebuggerDisplay] atrybut w ogóle,
- jeśli tak, to nie ma gwarancji, że będzie starał się ocenić {wyrażenie} klocki, i
- istnieje bardzo duża szansa, że nie będzie można ocenić # ekspresję C, jeśli zaczniesz robić niczego wyjątkowego (jak przy użyciu? :)
najbezpieczniejszym rzeczą byłoby być dodać prywatną własność do obliczenia d Wartość ebuggera:
[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;
}
}
}
To własność prywatna, więc nie przeszkadza żadnej potencjalnej podklasie.
Co powiesz na proste dodanie metody, która zwraca, co chcesz? Osobiście zwykle przesłonię 'ToString', ale można po prostu dodać inną metodę i użyć jej jako ciągu debuggera. – CodesInChaos
Można to zrobić, ale to byłaby ostatnia deska ratunku, ponieważ metoda wprowadza funkcje do klasy, która służy tylko do debugowania. Coś takiego pachnie jak zły projekt. Nigdy nie zastępuję 'ToString()' do celów debugowania. –