[英]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.