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