我正在尝试使用IEnumerable.Contains()
参数调用dynamic
,但我收到了错误
' IEnumerable的'不包含'包含'的定义和最好的扩展方法重载' Queryable.Contains(IQueryable,TSource)'有一些无效的论点
我注意到我可以将参数强制转换为正确的类型,或使用基础集合类型来解决问题。但我不确定为什么我不能直接传递参数。
dynamic d = "test";
var s = new HashSet<string>();
IEnumerable<string> ie = s;
s.Contains(d); // Works
ie.Contains(d); // Does not work
ie.Contains((string)d); // Works
答案 0 :(得分:6)
Enumerable.Contains
是一种扩展方法 - 并且扩展方法不会被执行时使用的迷你编译器解析。 (扩展方法取决于using
指令,这些指令没有被保留。它们可能是,但我想这看起来有点痛苦。)这包括使用dynamic
参数扩展方法, 和将它们用作&#34;目标&#34;扩展方法。
只需直接指定扩展方法:
var result = Enumerable.Contains(ie, d);