#c# #list #dynamic
#c# #Список #динамичный #динамический
Вопрос:
Предположим, у меня есть
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[тип (IDisposable))] myDynamicObject[тип (IDisposable)]
Таким образом, я бы получил IDiposable объект, который принадлежит myDynamicObject.
Эта строка выдает мне ошибку:
if (myList.Contains((item)=>item.GetType().Equals(indexes[0].GetType())){
Не удается преобразовать лямбда-выражение в тип ‘dynamic’, поскольку оно не является типом делегата
Я могу сделать это, просмотрев список: Но почему я не способен использовать Contains
?
Комментарии:
1. Это действительно интересный способ выполнения микширования в c #. У меня есть платформа с открытым исходным кодом, импровизированный интерфейс , который может принимать список интерфейсов и создает действительно легкий прокси, который наследует этот интерфейс и в основном оборачивает кучу привязок callsite, которые пересылаются к DynamicObject. Возможно, это вас заинтересует.
2. Очень интересный ваш фреймворк, jbtule. Я немного покопаюсь в этом.
Ответ №1:
Contains()
ожидает, что фактический элемент (типа dynamic
в вашем случае) не является делегатом, я думаю, вы хотите Any()
:
if (myList.Any( item => item.GetType().Equals(indexes[0].GetType()))
{
Ответ №2:
Потому что Contains
объявляется как:
public bool Contains(
T item
)
Вы должны использовать Any(your lambda)
Комментарии:
1. О боже, я совсем забыл об этом.
Ответ №3:
IEnumerable<T>.Contains()
не имеет перегрузки, которая принимает лямбда-выражение.