C# 无法将 lambda 表达式转换为“动态”类型;因为它不是委托类型
假设我有一个
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
?
Suppose I have a
List<dynamic> myList = new List<dynamic>();
Inside a class:
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);
}
}
I'm trying to write
myDynamicObject[typeof(IDisposable)]
So I would get the IDiposable object which belongs to myDynamicObject.
This line gives me an error:
if (myList.Contains((item)=>item.GetType().Equals(indexes[0].GetType())){
Cannot convert lambda expression to type 'dynamic' because it is not a delegate type
I'm able to do it by iterating through the list:
But why I'm not capable of using Contains
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
Contains()
需要一个实际项目(在您的情况下为dynamic
类型)而不是委托,我认为您需要Any()
:Contains()
expects an actual item (of typedynamic
in your case) not a delegate, I think you wantAny()
:因为
Contains
声明为:您应该使用
Any(your lambda)
Becasue
Contains
is declared as:You shoud use
Any(your lambda)
IEnumerable.Contains()
没有需要 lambda 的重载。
IEnumerable<T>.Contains()
does not have an overload that takes a lambda.