如何用LINQ和C#拆分字符串并提取VID与PID?
使用LINQ和C#拆分字符串并提取VID/PID
没问题,我来帮你搞定这个问题!首先咱们先从基础的LINQ拆分字符串说起,再一步步到提取VID和PID的场景~
一、用LINQ拆分字符串
C#里的Split()方法可以先把字符串拆分成数组,再结合LINQ的Select、Where等方法做进一步处理,比如去除空格、过滤空元素:
string input = "apple, banana , orange, "; // 按逗号拆分,去除每个元素的空格,过滤空字符串 var splitItems = input.Split(',') .Select(item => item.Trim()) .Where(item => !string.IsNullOrWhiteSpace(item)); // 遍历输出结果 foreach (var item in splitItems) { Console.WriteLine(item); }
这段代码会输出:apple、banana、orange,自动处理了空格和末尾的空元素。
二、用LINQ提取VID和PID
通常VID/PID会出现在类似USB设备ID的字符串里(比如"USB\\VID_0483&PID_5750\\0000000001A1"),咱们可以通过LINQ一步步解析:
方法1:转为字典存储VID/PID
string deviceId = "USB\\VID_0483&PID_5750\\0000000001A1"; // 1. 按反斜杠拆分,找到包含VID和PID的片段 // 2. 按&拆分出VID和PID的键值对 // 3. 转为字典方便取值 var vidPidDict = deviceId.Split('\\') .FirstOrDefault(part => part.Contains("VID_") && part.Contains("PID_")) ?.Split('&') .ToDictionary( kv => kv.Split('_')[0], // 提取键:VID/PID kv => kv.Split('_')[1] // 提取值:对应的ID数字 ); // 安全取值并输出 if (vidPidDict != null) { if (vidPidDict.TryGetValue("VID", out string vid)) Console.WriteLine($"提取到VID:{vid}"); if (vidPidDict.TryGetValue("PID", out string pid)) Console.WriteLine($"提取到PID:{pid}"); }
方法2:直接提取为自定义对象(或匿名对象)
如果不想用字典,也可以直接提取为匿名对象:
string deviceId = "USB\\VID_0483&PID_5750\\0000000001A1"; var idInfo = deviceId.Split('\\') .FirstOrDefault(part => part.Contains("VID_")) ?.Split('&') .Select(part => { var parts = part.Split('_'); return new { Type = parts[0], Id = parts[1] }; }); // 遍历输出 foreach (var info in idInfo ?? Enumerable.Empty<object>()) { Console.WriteLine($"{info.Type}: {info.Id}"); }
注意事项
- 一定要处理空引用:用
FirstOrDefault()代替First(),再结合?.操作符,避免字符串格式不符合时抛出异常 - 如果你的VID/PID字符串格式不同(比如是
"VID=1234;PID=5678"),只需要调整拆分的分隔符(把'&'换成';','_'换成'=')即可
内容的提问来源于stack exchange,提问作者Joseph Cenk
相关产品推荐
相关产品推荐

