C # Не удается преобразовать лямбда-выражение в тип «динамический», потому что это не тип делегата - PullRequest
3 голосов
/ 29 апреля 2011

Предположим, у меня есть

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)], поэтому я бы получил объект IDiposable, которыйпринадлежит myDynamicObject.

В этой строке выдается ошибка:

if (myList.Contains((item)=>item.GetType().Equals(indexes[0].GetType())){

Невозможно преобразовать лямбда-выражение в тип 'dynamic', поскольку оно не является типом делегата

Я могу сделать это, перебирая список: но почему я не могу использовать Contains?

Ответы [ 3 ]

7 голосов
/ 29 апреля 2011

Contains() ожидает, что фактический элемент (типа dynamic в вашем случае) не является делегатом, я думаю, что вы хотите Any():

 if (myList.Any( item => item.GetType().Equals(indexes[0].GetType()))
 {
6 голосов
/ 29 апреля 2011

Becasue Conaints объявляется как:

public bool Contains(
    T item
)

Вы должны использовать Any(your lambda)

2 голосов
/ 29 апреля 2011

IEnumerable<T>.Contains() не имеет перегрузки, которая принимает лямбду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...