繁体   English   中英

如何在Visual Studio的调试器中摆脱System .__ Canon?

[英]How to get rid of System.__Canon in debugger of Visual Studio?

当我将通用引用类型与通用结构结合使用时,Visual Studio的调试器的行为会很奇怪:

class C<T>
{
    public T ClassItem { get; set; }
}

struct S<T>
{
    public T StructItem;
}

class Program
{
    static void Main(string[] args)
    {
        var foo = new C<S<string>> {ClassItem = new S<string> {StructItem = "Bar"}};
    }
}

当我尝试查看ClassItem字段时,看到的是奇怪的System.__Canon而不是该字段的实际内容:

调试器的屏幕截图

实际上,如果我将以下行添加到“监视”窗口,则有一种窥视结构内容的方法: ((S<string>) foo.ClassItem).StructItem 在这种情况下,我可以看到“ Bar”字符串。 但是,对于大型项目和更复杂的类型,这是一个很大的痛苦。 那么有没有办法让调试器正常运行?

我有两个版本的Visual Studio:2013和2015,它们的行为方式相同。

您可以查看包含System .__ Canon的.NET源。

根据前面的评论,似乎此类对于实例化泛型类型是必需的。

msdn上问类似的问题

根据有关codeproject的文章:

对于为类型参数提供值类型的每个封闭的通用类型,CLR在运行时会创建一个新类型并将其用于实例化和其他用途。 对于引用类型提供的给定通用类型的所有封闭通用类型,CLR创建一种类型,其中为其提供引用类型的类型参数被名为System .__ Canon的特殊类型替换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM