考虑以下简单程序(使用Visual Studio 2015):
控制台将报告ToString方法的预期输出。然而,在调试模式下,输出不同。 我一直认为Visual Studio使用
更新:附加信息
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");
}
控制台将报告ToString方法的预期输出。然而,在调试模式下,输出不同。 我一直认为Visual Studio使用
ToString()
调用来显示此值。然而,对于结构体来说似乎不是这种情况。有人能解释一下这种行为吗?我希望回答时也能描述一下首先如何计算这个值,因为我的理解好像不完整。更新:附加信息
- 在使用Visual Studio 2013时,不会出现此问题。
- 将
ToString
调用硬编码为不同的值会导致正常行为。
ToString()
重写。您可以通过放置一个Console.Write(...)
来确认这一点,以记录一些消息,并在调试器停止在Console.ReadKey()
时检查控制台窗口,您应该可以看到从ToString()
重写中打印出的消息。 - Siva Gopal