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

Con*_*ark 3 c# list dynamic

假设我有一个

List<dynamic> myList = new List<dynamic>();
Run Code Online (Sandbox Code Playgroud)

在课堂内:

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);
    }

}
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写myDynamicObject [typeof(IDisposable)]所以我会得到属于myDynamicObject的IDiposable对象.

这行给了我一个错误:

if (myList.Contains((item)=>item.GetType().Equals(indexes[0].GetType())){
Run Code Online (Sandbox Code Playgroud)

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

我可以通过迭代列表来做到这一点:但为什么我无法使用Contains

Bro*_*ass 7

Contains()期望一个实际的项目(dynamic在你的情况下类型)不是委托,我想你想要Any():

 if (myList.Any( item => item.GetType().Equals(indexes[0].GetType()))
 {
Run Code Online (Sandbox Code Playgroud)


And*_*rey 6

Becasue Conaints被宣布为:

public bool Contains(
    T item
)
Run Code Online (Sandbox Code Playgroud)

你应该使用 Any(your lambda)