相关疑难解决方法(0)

是什么让Visual Studio调试器停止评估ToString覆盖?

环境: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)

c# debugging visual-studio-2015

220
推荐指数
1
解决办法
1万
查看次数

标签 统计

c# ×1

debugging ×1

visual-studio-2015 ×1