我正在为一个 USB HID 库使用一些开源 C# 代码,我正在尝试修改它。我的 C#(和一般的 OOP)非常生疏,所以请原谅这个基本问题。
前提很简单:检查枚举的 HID 设备,如果其中一个设备与我想要的 VID 和 PID 匹配,则获取并返回该设备的完整路径。第一部分(检查匹配项)工作正常,但我似乎无法弄清楚将路径返回到相同匹配设备的语法。
public static string IsConnected(string deviceVID, string devicePID)
{
if (EnumerateDevices().Any(x => x.VID == deviceVID && x.PID == devicePID))
{
return EnumerateDevices().Select(x => x.Path).Where(x => x.Attributes.ProductId == devicePID);
}
else
{
return "False";
}
}
VS15 提示“‘string’不包含‘Attributes’的定义,并且找不到接受‘string’类型的第一个参数的扩展方法‘Attributes’”。
我明白了,看起来 Where 只接受整数。 .NET Framework Enumerable 类中还有其他东西可以像我想要的那样工作吗?或者更简单的方法来做到这一点?
最佳答案
那是因为您首先需要使用 Select()
获取路径(字符串集合),然后使用 Where()
过滤您的集合,您可以在其中没有任何 Attributes
属性。
您的 LINQ 查询应首先应用您的过滤器,然后选择您要查找的对象的路径:
return EnumerateDevices().Where(x => x.Attributes.ProductId == devicePID).Select(x => x.Path).SingleOrDefault();
关于c# - 有条件地检索列表成员的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40896552/