首页 > 解决方案 > Linq 方法不适用于实现 IEnumerable 的集合

问题描述

我正在尝试为Bar类添加扩展方法。

using System;
using System.ComponentModel;
using DevExpress.XtraBars;
using System.Drawing;
using System.Windows.Forms;
using System.Linq;
using System.Data;

public static class BarExtensions
{
    public static BarItemLink GetBarItemLinkByTag(this Bar bar, object tag)
    {
        BarItemLink foundItemLink = null;
        bool a = bar.ItemLinks.Any(x => x.Item.Tag.Equals(tag));
        ...
    }
}

项目链接是BarItemLinkCollection类型的属性。这个类推动IEnumerable

但是当我尝试使用任何 Linq 方法(例如Any)时,我得到了错误:

'DevExpress.XtraBars.BarItemLinkCollection' 不包含'Any' 的定义,并且找不到接受'DevExpress.XtraBars.BarItemLinkCollection' 类型的第一个参数的扩展方法'Any'(您是否缺少 using 指令或程序集引用?)

我使用 DevExpress 15.1.7。

问题是我错过了什么。为什么我没有可用于该属性的 Linq 方法?

标签: c#linqdevexpress

解决方案


我找不到版本 15.1.7 的任何文档,但我假设它IEnumerable已返回,因此您首先必须使用Cast<T>()OfType<T>获取一个IEnumerable<T>(请参阅https://stackoverflow.com/a/7757411/3936440)。

所以我认为你需要写

bool a = bar.ItemLinks.Cast<BarItemLink>().Any(x => x.Item.Tag.Equals(tag))


推荐阅读