Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么赢了';Visual Studio调试器是否正确计算包含泛型类型参数的表达式?_C#_Visual Studio_Debugging_Visual Studio Debugging - Fatal编程技术网

C# 为什么赢了';Visual Studio调试器是否正确计算包含泛型类型参数的表达式?

C# 为什么赢了';Visual Studio调试器是否正确计算包含泛型类型参数的表达式?,c#,visual-studio,debugging,visual-studio-debugging,C#,Visual Studio,Debugging,Visual Studio Debugging,在以下代码中: private static void Main(string[] args) { var listy = new List<DateTime> { DateTime.Now }; MyMethod(listy); } static void MyMethod<T>(List<T> myList)

在以下代码中:

        private static void Main(string[] args)
        {            
            var listy = new List<DateTime> { DateTime.Now };
            MyMethod(listy);
        }

        static void MyMethod<T>(List<T> myList)
        {
            // put breakpoint here
        }
如果选择“[0]”节点并单击“添加监视”,则添加到监视的表达式:

(新系统.Collections.Generic.Mscorlib\u CollectionDebugView(myList)).Items[0]

此表达式似乎正确,但“监视”窗口显示以下错误:

匹配的最佳重载方法 'System.Collections.Generic.Mscorlib_CollectionDebugView.Mscorlib_CollectionDebugView(System.Collections.Generic.ICollection)' 有一些无效的参数


这似乎是调试器中的一个bug。为什么会发生这种情况?它被记录在任何地方吗?

看起来是这样的。我已经能够复制错误
Mscorlib_CollectionDebugView
只有一个构造函数接受
ICollection
List
实现
ICollection
。此外,显式强制转换到
ICollection
工作:

(new System.Collections.Generic.Mscorlib_CollectionDebugView<System.DateTime>((ICollection<DateTime>)myList)).Items[0]
(新系统.Collections.Generic.Mscorlib_CollectionDebugView((ICollection)myList))。项[0]

这看起来像是C#的表达式求值器的重载解析逻辑中的错误。调用泛型类型构造函数和传递绑定泛型的组合似乎是一个关键。删除其中一个似乎可以解决问题。例如,您可以通过显式地将
myList
强制转换为
ICollection
来调用前面提到的表达式(这并不能解决我尝试过的所有情况)

这是我为缩小问题范围而编写的一个示例程序

class C<T> {
    public C(ICollection<T> collection) {

    }
}

static void Example<T>(ICollection<T> collection) {
}
C类{
公共C(ICollection集合){
}
}
静态无效示例(ICollection集合){
}
同时,您可以尝试以下评估

  • 示例(myList)
    -无误运行
  • 新建C(myList)
    -失败并出现相同错误

在这一点上,我认为您应该在上提交一个bug。这肯定是一个bug(类似的代码在VB.Net中可以正常工作)

它在myList中有问题,如果使用静态变量,它就会正常工作。发布到connect.microsoft.comMicrosoft,希望这不会发生在dev11中。谢谢。我也找到了这个解决方法。但我更关心的是为什么会发生这种情况,这样我就可以了解这种变通方法是否总是适用的(我正在编写一个与调试有关的Visual Studio扩展,因此了解根本原因对我来说很重要)谢谢!我开了一张联运票。我想我会一直使用变通方法,并希望达到最好。
class C<T> {
    public C(ICollection<T> collection) {

    }
}

static void Example<T>(ICollection<T> collection) {
}