C# Visual Studio调试模式下的结构和类显示值

C# Visual Studio调试模式下的结构和类显示值,c#,visual-studio,C#,Visual Studio,考虑以下简单程序(使用Visual Studio 2015): 控制台将报告ToString方法的预期输出但是,在调试模式下,输出不相同。 我一直认为VisualStudio使用了ToString()调用来显示这个值。然而,对于structs,情况似乎并非如此。有人能解释一下这种行为吗?我希望您能给出一些答案,说明这个值是如何计算的,因为我的理解似乎不完整 更新:补充资料 当我使用Visual Studio 2013时,此问题不会发生 硬编码对不同值的ToString调用会导致正常行为 不确定

考虑以下简单程序(使用Visual Studio 2015):

控制台将报告
ToString
方法的预期输出但是,在调试模式下,输出不相同。

我一直认为VisualStudio使用了
ToString()
调用来显示这个值。然而,对于structs,情况似乎并非如此。有人能解释一下这种行为吗?我希望您能给出一些答案,说明这个值是如何计算的,因为我的理解似乎不完整

更新:补充资料
  • 当我使用Visual Studio 2013时,此问题不会发生
  • 硬编码对不同值的
    ToString
    调用会导致正常行为

  • 不确定原因-但DebuggerDisplayAttribute可用于此效果:

    <使用指南 <显示可应用于的类型

    类似这样的方法会奏效:

    [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}")]
    

    输出有什么不同?@GrandMasterFlush一个打印日期,一个打印日期和时间。我敢打赌,调试器调用toString()来显示值。是否可以尝试避免任何WriteLine,并在struct的ToString()方法中插入异常?调试器中发生了什么?我在调试器和控制台中看到了相同的
    MM/dd/yyyy
    格式,当我复制您的代码时。同样在这两种情况下(类/结构),调试器调用
    ToString()
    重写。您可以通过放置一个
    控制台来确认这一点。写入(…)
    以记录一些消息,当调试器停止在
    控制台上时。ReadKey()
    ,检查控制台窗口,您应该会看到从
    ToString()
    覆盖中打印的消息。谢谢Chris!这是非常有用和有趣的。因为我的问题不是如何让这种行为消失,而是为了理解这种行为本身,我选择不把它作为一个答案。NP-很高兴你发现它很有用。我也很想知道原因。
    [DebuggerDisplay("{ToString(),nq}")]