考虑以下简单程序(使用Visual Studio 2015):
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()
调用来显示此值。但结构似乎并非如此。有人可以解释这种行为吗?我会很感激答案,这些答案也描述了如何计算这个值,因为我的理解似乎不完整。
ToString
次调用硬编码为不同的值会导致正常行为。答案 0 :(得分:3)
不确定为什么 - 但DebuggerDisplayAttribute可用于此效果:
https://msdn.microsoft.com/en-us/library/ms228992(v=vs.110).aspx<使用指南 https://msdn.microsoft.com/en-us/library/x810d419.aspx<显示可应用于
的类型这样的事情会起作用:
[DebuggerDisplay("{ToString()}")]
public struct MyDateTimeWrapperStruct
{
private readonly DateTime _value;
public MyDateTimeWrapperStruct(DateTime value)
{
_value = value;
}
public override string ToString() => _value.ToString("MM/dd/yyyy");
}
使用以下内容删除引号:
[DebuggerDisplay("{ToString(),nq}")]