C# - Troubles with IEnumerable.Where
本文关键字:IEnumerable Where with Troubles | 更新日期: 2023-09-27 18:32:29
我目前正在开发一个小程序,该程序应该通过原始输入API获取条形码扫描仪(所谓的"HID")扫描的信息。
我已经阅读了许多关于此的教程,我想我正在了解它是如何工作的。我正在使用 IEnumerable 来枚举输入设备。但是现在编译器尖叫着说Where
方法对于IEnumerable来说是未知的。
我已经浏览了有关IEnumerable的MSDN文章,如果我正确理解了这些文章,那么Where
方法应该是其中的一部分。
下面是一个小片段,其中包含我想使用的地方 Where:
var rawInputDevice in rawDeviceEnumerator.Devices
.Where(d => d.DeviceType == Win32.RawInputDeviceType.Keyboard)
有人可以给我一个方法吗?我认为这只是我监督的一件小事。
您注意到的问题通常来自 .net 3.0 之前的较旧集合类型,该类型引入了泛型类型。
要使用的方法是 Enumerable.Where(this IEnumerable<T> enumerable, Func<T,bool> predicate)
。然而rawDeviceEnumerator.Devices
似乎是一个IEnumerable
而不是IEnumerable<T>
.假设您使用的是 http://www.news2news.com/vfp/?example=571&ver=vcs&PHPSESSID=5f4393ed0b6c7c205851a834e657e8be 中的RawInputDeviceEnumerator
,那么您有几种选择。
第一。将代码从
public IEnumerable Devices
{
get
{
return this._devices;
}
}
自
public IEnumerable<RawInputDevice> Devices
{
get
{
return this._devices;
}
}
或者您可以使用
var rawInputDevice in rawDeviceEnumerator.Devices
.Cast<RawInputDevice>()
.Where(d => d.DeviceType == Win32.RawInputDeviceType.Keyboard)
你的意思是Enumeration.Where
这是一种扩展方法。它似乎根据类的类型及其基类或接口将方法"添加"到现有类。
如果在代码文件中包含System.Linq
作为命名空间,您将看到此扩展方法将出现在实现IEnumerable<TSource>
的每个对象上,例如List<T>
或int[]
。