我目前正在开发一个小程序,它应该通过Raw-Input API获取条形码扫描器(所谓的“HID”)扫描的信息。
我已经阅读了很多关于这方面的教程,我想我正在理解它是如何工作的。我正在使用IEnumerable来枚举输入设备。但是现在编译器尖叫说IEnumerable不知道Where
- Method。
我正在阅读有关IEnumerable的MSDN文章,如果我理解正确的文章,Where
- 方法应该是其中的一部分。
在我想要使用Where:
的地方的小片段下方var rawInputDevice in rawDeviceEnumerator.Devices
.Where(d => d.DeviceType == Win32.RawInputDeviceType.Keyboard)
有人可以给我一个方法吗? 我认为这只是我监督的一件小事。
答案 0 :(得分:1)
我认为你的意思是Enumeration.Where
extension method。它似乎是在添加'现有类的方法基于类的类型及其基类或接口。
如果在代码文件中包含System.Linq
作为命名空间,您会看到此扩展方法将出现在实现IEnumerable<TSource>
的每个对象上,例如List<T>
或int[]
答案 1 :(得分:1)
您注意到的问题通常来自.net 3.0之前的较旧的Collection类型,它引入了泛型类型。
您要使用的方法是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)