Visual Studio调试模式

时间:2015-11-10 17:36:01

标签: c# visual-studio

考虑以下简单程序(使用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方法的预期输出。 但是,在调试模式下,输出不一样。

enter image description here

我一直认为Visual Studio使用ToString()调用来显示此值。但结构似乎并非如此。有人可以解释这种行为吗?我会很感激答案,这些答案也描述了如何计算这个值,因为我的理解似乎不完整。

更新:附加信息

  1. 使用Visual Studio 2013时不会发生此问题。
  2. ToString次调用硬编码为不同的值会导致正常行为。

1 个答案:

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