【发布时间】:2011-04-29 18:04:48
【问题描述】:
假设我有一个
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?
【问题讨论】:
-
这是在 c# 中进行混入的一种非常有趣的方式。我有一个开源框架impromptu-interface,它可以获取接口列表并创建一个非常轻量级的代理来继承这些接口,并且基本上包装了一堆转发到 DynamicObject 的调用站点绑定。您可能对此感兴趣。
-
你的框架非常有趣,jbtule。我会深入研究一下。