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

发布于 2024-11-04 10:42:15 字数 989 浏览 0 评论 0原文

假设我有一个

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

深海里的那抹蓝 2024-11-11 10:42:15

Contains() 需要一个实际项目(在您的情况下为 dynamic 类型)而不是委托,我认为您需要 Any()

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

Contains() expects an actual item (of type dynamic in your case) not a delegate, I think you want Any() :

 if (myList.Any( item => item.GetType().Equals(indexes[0].GetType()))
 {
肤浅与狂妄 2024-11-11 10:42:15

因为 Contains 声明为:

public bool Contains(
    T item
)

您应该使用 Any(your lambda)

Becasue Contains is declared as:

public bool Contains(
    T item
)

You shoud use Any(your lambda)

‘画卷フ 2024-11-11 10:42:15

IEnumerable.Contains()没有需要 lambda 的重载。

IEnumerable<T>.Contains() does not have an overload that takes a lambda.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文