非泛型类型“System.Collections.ArrayList”不能与类型参数一起使用。

3
我通过反射读取了一个私有字段:

var parameters = typeof(HqlProvider).GetField("paramList", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(query);

它可以正常工作。我可以设置断点并查看所有内容。但是当我尝试将参数转换为它所代表的类型(ArrayList)时,我会得到“非泛型类型'System.Collections.ArrayList'不能与类型参数一起使用”的错误。

它为什么不能将其转换为它所代表的类型呢?


3
请使用通用的 System.Collections.Generic.List<T>,而不要使用非通用的 ArrayList - Jeff Mercado
4
你能展示你所尝试的演员阵容吗? - DWright
1
请展示给我们失败的代码,而不是能正常运行的代码... - Jon Skeet
所有这些都失败了:(ArrayList<QueryParameter>)parameters、(IList<QueryParameter>)parameters、(System.Collections.Generic.IList<QueryParameter>)parameters和(System.Collections.Generic.List<QueryParameter>)parameters。我在监视窗口中执行此操作。这些转换的错误如下所示:无法将具有实际类型为“System.Collections.ArrayList”的“parameters”转换为“System.Collections.Generic.IList<FOO.DAL.QueryParameter>”System.Collections.Generic.IList<Foo.DAL.QueryParameter>。 - user2102611
@dolphonebubleine 将其添加到问题中。 - Der Kommissar
1个回答

2

ArrayList 不是范型的,也没有实现任何范型接口,所以你需要将其强制转换为非范型版本,例如:

var al = (ArrayList)parameters
var l = (System.Collections.IList)parameters

成功了!谢谢。在监视窗口中它没有起作用,但当我把它放到实际代码中时,它就正常工作了。var parameters = typeof(HqlProvider).GetField("paramList", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(query) as System.Collections.IList; - user2102611

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接