Ome*_*viv 7 c# debugging visual-studio 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)
{
// put breakpoint here
}
Run Code Online (Sandbox Code Playgroud)
如果我打破调试器,在"myList"上打开QuickWatch,我看到:
myList
[0]
Raw View
Run Code Online (Sandbox Code Playgroud)
如果我选择"[0]"节点并单击Add Watch,则添加到Watch的表达式:
(new System.Collections.Generic.Mscorlib_CollectionDebugView<System.DateTime>(myList)).Items[0]
此表达式似乎正确,但是,监视窗口显示以下错误:
'System.Collections.Generic.Mscorlib_CollectionDebugView.Mscorlib_CollectionDebugView(System.Collections.Generic.ICollection)'的最佳重载方法匹配有一些无效的参数
这似乎是调试器中的一个错误.为什么会这样?它是否记录在任何地方?
这看起来像是 C# 表达式求值器的重载解析逻辑中的错误。调用泛型类型构造函数和传递绑定泛型的组合似乎是关键。删除其中任何一个似乎可以解决问题。myList例如,您可以通过显式转换来调用提到的表达式ICollection<DateTime>(这并不能解决我尝试过的所有情况)
这是我为缩小问题范围而编写的示例程序
class C<T> {
public C(ICollection<T> collection) {
}
}
static void Example<T>(ICollection<T> collection) {
}
Run Code Online (Sandbox Code Playgroud)
同时你可以尝试以下评测
Example(myList)- 工作没有错误new C<DateTime>(myList)- 失败并出现相同的错误此时我认为您应该在Connect上提交错误。这绝对是一个错误(类似的代码在 VB.Net 中工作正常)