c# - 有条件地检索列表成员的语法

标签 c# .net

我正在为一个 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/

相关文章:

.NET 客户端使用 AXIS 1.4 SSL Webservice 所有异常 "INTERNAL SERVER ERROR"

C#:将 CookieContainer 写入磁盘并加载回来使用

.net - 使用内部委托(delegate)类型编译 lambda 表达式

.net - 如何将 .NET WebSocket 客户端与 NTLM 代理结合使用?

.net - app.config appSettings 文件属性中的环境变量

c# - 将 TDD 与 OpenXml-SDK 结合使用

c# - 试图从 bat 文件中读取但它给了我一个错误

c# - 使用网络流发送和接收数据 C#

c# - 从 Swagger 中排除特定的枚举值

.net - Visual Studio 的最佳替代 IDE 是什么