C# - debugging: [DebuggerDisplay] oder ToString()?
Gibt es zwei Möglichkeiten zur Erhöhung der Nützlichkeit von debugging-Informationen, anstatt zu sehen {MyNamespace.MyProject.MyClass}
im debugger.
Diese sind die Verwendung des [DebuggerDisplayAttribute][1]
und die ToString()
Methode.
using System.Diagnostics;
...
[DebuggerDisplay("Name = {Name}")]
public class Person
{
public string Name;
}
oder
public class Person
{
public string Name;
public override string ToString()
{
return string.Format("Name = {0}", Name);
}
}
Gibt es einen Grund zu bevorzugen, die einen zu den anderen? Jeder Grund, nicht beides tun? Ist es rein persönliche Präferenz?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit
[DebuggerDisplay]
gemeint ist, nur für den debugger. Überschreiben von ToString() hat die "Nebenwirkung" änderung der Darstellung zur Laufzeit.Dies kann oder kann nicht eine gute Sache sein.
Oft, Sie wollen mehr Informationen, die beim Debuggen als Ihre standard -
ToString()
Ausgang, in dem Fall würden Sie beide verwenden.Zum Beispiel, in Ihrem Fall, die "ToString" - Implementierung scheint mir komisch. Ich würde erwarten, dass eine "Person" Klasse ToString () - Implementierung, um einfach nur wieder den Namen direkt, nicht "Name = PersonsName". Aber beim Debuggen, ich könnte wollen, dass zusätzliche Informationen zur Verfügung.
ToString
wird oft als eine "Standard-Darstellung "string", z.B. durchConsole.WriteLine
oder WPF-Datenbindung.Wenn das, was
ToString()
zurück und Sie sehen im debugger ist nicht das, was Sie möchten, dann verwenden SieDebuggerDisplayAttribute
.Langsamkeit der debugger kann auch berücksichtigt werden:
DebuggerDisplayAttribute
format Ausdruck ist interpretiert durch den debugger nach jedem debugging-Schritt /Haltepunkt.ToString
ist zusammengestellt in Ihrem code und ist deshalb viel schneller ausführen, indem Sie den debugger.Ist das das gleiche mit bedingten breakpoints: Wenn der bedingte Ausdruck ist zu langsam, zu interpretieren, indem Sie den debugger jedes mal, wenn die Ausführung den Haltepunkt erreicht, kann es nützlich sein, entfernen Sie den Haltepunkt, und stattdessen hinzufügen von temporären code wie folgt:
if (condition) Debugger.Break();