环境:Visual Studio 2015 RTM.(我没有尝试旧版本.)
最近,我一直在调试我的一些Noda Time代码,我注意到当我有一个类型的局部变量NodaTime.Instant(structNoda Time中的一个中心类型)时,"Locals"和"Watch"窗口似乎没有调用它的ToString()覆盖.如果我ToString()在监视窗口中明确调用,我会看到相应的表示,但我只是看到:
variableName {NodaTime.Instant}
Run Code Online (Sandbox Code Playgroud)
这不是很有用.
如果我更改覆盖以返回一个常量字符串,那么该字符串将显示在调试器中,因此它显然能够接收它 - 它只是不想在"正常"状态下使用它.
我决定在一个小的演示应用程序中本地重现这个,这就是我想出的.(请注意,在这篇文章的早期版本中,DemoStruct是一个类,DemoClass根本不存在 - 我的错,但它解释了一些看起来很奇怪的评论......)
using System;
using System.Diagnostics;
using System.Threading;
public struct DemoStruct
{
public string Name { get; }
public DemoStruct(string name)
{
Name = name;
}
public override string ToString()
{
Thread.Sleep(1000); // Vary this to see different results
return $"Struct: {Name}";
}
}
public class DemoClass
{
public string …Run Code Online (Sandbox Code Playgroud)