假设我有一个
List<dynamic> myList = new List<dynamic>();
在课堂内:
public class DynamicMixin : DynamicObject
{
internal List<dynamic> myList= new List<dynamic>();
public void AddInterface<T>(T _item) where T:class{
Interfaces.Add(_item);
}
public override bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result)
{
if (myList.Contains((item)=>item.GetType().Equals(indexes[0].GetType())){
/* do something */
}
return base.TryGetIndex(binder, indexes, out result);
}
}
我正在努力写作 myDynamicObject [typeof运算(IDisposable接口)] 所以我会得到属于myDynamicObject的IDiposable对象。
这一行给了我一个错误:
if (myList.Contains((item)=>item.GetType().Equals(indexes[0].GetType())){
无法将lambda表达式转换为“动态”类型,因为它不是委托类型
我可以通过迭代列表来做到这一点:
但为什么我无法使用Contains
?
答案 0 :(得分:7)
Contains()
期望实际项目(在您的案例中类型为dynamic
)不是代理人,我认为您需要Any()
:
if (myList.Any( item => item.GetType().Equals(indexes[0].GetType()))
{
答案 1 :(得分:6)
因为Conaints
被声明为:
public bool Contains(
T item
)
您应该使用Any(your lambda)
答案 2 :(得分:2)
IEnumerable<T>.Contains()
没有带lambda的重载。