如何使用LINQ从字符串列表提取指定键对应值及查询字符位置
解决方案
你现有代码已经拿到了"TOTO=1"这个目标字符串,只需要追加字符串处理逻辑即可拿到对应数值,有两种常用实现方案:
方案1:按=分割字符串(最简便)
直接在现有代码基础上追加分割逻辑,不需要多余的类型转换操作:
// 原代码里的ToList()可以省略,lines本身已经是List类型 var value = lines.Single(x => x.Contains("TOTO=")).Split('=')[1].Trim();
如果需要得到int类型的数值,再加一步类型转换即可:
int num = int.Parse(lines.Single(x => x.Contains("TOTO=")).Split('=')[1].Trim());
方案2:先定位=位置再截取(对应你查询字符位置的需求)
如果需要先查询等号在字符串中的下标位置,再截取后续内容,可以用IndexOf方法实现:
string targetLine = lines.Single(x => x.Contains("TOTO=")); // 获取等号的下标位置,在"TOTO=1"中返回值为4 int equalIndex = targetLine.IndexOf('='); // 从等号的下一位开始截取内容 string value = targetLine.Substring(equalIndex + 1).Trim();
这种方式兼容性更强,就算数值部分也包含=字符,也能正常取出第一个等号之后的全部内容。
边界优化建议
如果不能保证列表里一定存在TOTO=开头的元素,建议做异常兼容处理:
- 用
StartsWith("TOTO=")代替Contains("TOTO="),避免匹配到内容中间包含TOTO=的无效行 - 用
SingleOrDefault代替Single,匹配不到目标元素时不会直接抛出异常
string targetLine = lines.SingleOrDefault(x => x.StartsWith("TOTO=")); if (targetLine != null) { string value = targetLine.Split('=')[1].Trim(); }
内容的提问来源于stack exchange,提问作者Newbie_thefirst
相关产品推荐
相关产品推荐

