C#无法将lambda表达式转换为“动态”类型,因为它不是委托类型

时间:2011-04-29 18:04:49

标签: c# list dynamic

假设我有一个

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

3 个答案:

答案 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的重载。