Betrachten Sie das folgende einfache Programm (Visual Studio 2015 verwenden):Struct und Klassenanzeigewert in Visual Studio Debug-Modus
public class Program
{
public static void Main(string[] args)
{
var dtClass = new MyDateTimeWrapperClass(DateTime.Today);
var dtStruct = new MyDateTimeWrapperStruct(DateTime.Today);
WriteLine(dtClass);
WriteLine(dtStruct);
ReadKey();
}
}
public class MyDateTimeWrapperClass
{
private readonly DateTime _value;
public MyDateTimeWrapperClass(DateTime value)
{
_value = value;
}
public override string ToString() => _value.ToString("MM/dd/yyyy");
}
public struct MyDateTimeWrapperStruct
{
private readonly DateTime _value;
public MyDateTimeWrapperStruct(DateTime value)
{
_value = value;
}
public override string ToString() => _value.ToString("MM/dd/yyyy");
}
Die Konsole die erwartete Ausgabe der ToString
Methode berichten. Im Debug-Modus ist die Ausgabe jedoch nicht identisch.
ich immer gedacht hatte, dass Visual Studio eine ToString()
Aufruf verwendet diesen Wert anzuzeigen. Bei Strukturen scheint dies jedoch nicht der Fall zu sein. Kann jemand dieses Verhalten erklären? Ich würde die Antworten schätzen, die auch beschreiben, wie dieser Wert in erster Linie berechnet wird, da es scheint, dass mein Verständnis unvollständig ist.
Update: Weitere Informationen
- Dieses Problem tritt nicht, wenn ich Visual Studio 2013
- hartzucodieren die
ToString
Anrufe auf unterschiedliche Werte ergibt ein normales Verhalten.
Was ist anders an der Ausgabe? – GrandMasterFlush
@GrandMasterFlush Man druckt das Datum, man druckt Datum und Uhrzeit. –
Ich hätte das selbe gesetzt, Debugger ruft toString() auf, um Wert anzuzeigen. Können Sie versuchen, jede WriteLine zu vermeiden und eine Ausnahme in die ToString() -Methode der Struktur einzufügen? Was passiert im Debugger? –