You need to enable JavaScript to run this app. 如何为给定C#代码编写LINQ查询,实现按动态逗号分隔值筛选字符串列表
优惠活动
大模型
产品
解决方案
定价
更多

如何为给定C#代码编写LINQ查询,实现按动态逗号分隔值筛选字符串列表

C# 嵌套遍历筛选逻辑转LINQ实现

实现逻辑对齐

你原代码的核心规则是:从给定字符串列表中,保留所有元素——只要该元素包含任意一个用户输入的、逗号分隔的搜索子串,内层循环找到第一个匹配项就停止判断,避免重复添加结果。
这套逻辑完全可以用LINQ等价替换,不需要手动写嵌套循环和break判断。

可直接使用的实现代码

// 初始化原始字符串列表
List<string> originalStrings = new List<string>
{
    "abdecacd",
    "facdgh",
    "iabcacdjk",
    "lmn",
    "opqe",
    "acbd",
    "efgh"
};

// 动态接收用户输入的逗号分隔搜索内容,替代原硬编码的strToSearch
string userInput = Console.ReadLine()?.Trim() ?? string.Empty;

// 拆分搜索关键词:自动过滤空值、去掉每个关键词的首尾空格,避免无效匹配
string[] searchTerms = userInput
    .Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries)
    .ToArray();

// 核心LINQ查询 完全替代原双层for循环逻辑
var filterResult = originalStrings
    .Where(item => searchTerms.Any(term => item.Contains(term)))
    .ToList();

// 遍历输出匹配结果
foreach (var resultItem in filterResult)
{
    Console.WriteLine(resultItem);
}

对应原代码的优化点

  • 删掉了冗余自封装的Like方法:string.Contains本身就能完成子串包含判断,不需要额外写方法包装
  • searchTerms.Any(...) 完全等价于原内层循环找到匹配项就break的行为,同一个列表项就算匹配多个关键词,也只会被加入结果一次
  • 适配动态输入:不管用户输入多少个、什么样的逗号分隔搜索值,拆分逻辑都能自动适配,不需要手动调整循环边界
  • 移除了无意义的strNew != null判断:LINQ查询就算没有匹配到任何元素,返回的也是空集合,永远不会为null,直接遍历输出即可
  • 补充了鲁棒性处理:拆分时自动过滤空项、给关键词做去空格处理,解决用户输入连续逗号、关键词前后带多余空格导致的匹配偏差
  • 执行效率和原手写循环无差异:LINQ的Where+Any底层和你手写的嵌套循环、break逻辑执行流程完全一致,不会有额外性能损耗

内容的提问来源于stack exchange,提问作者aniket narvankar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.10 19:36:04