c# - 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 方法?
解决方案
我找不到版本 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))
推荐阅读
- php - Imagen、HEX 到 Byte 和 Byte 到 HEX 并显示 img。Visual Basic 到 PHP
- r - 如何在每个元素前面附加列号?
- haskell - 尝试使用 if 跟踪函数
- c++ - 如何简化 std::variant 类类型
- sql - 为具有两个字段的不同组合的记录选择行 ID
- istio - 如何获得 Istio 策略正在运行的反馈
- ios - SceneView 相机预览作为背景
- sql - Teradata 相当于此 SQL Server DATETIME 代码?
- c# - C# WPF 如何更改代码中的 x:FieldModifier?
- spring - 可选的可空实体 - 弹簧靴