C#使用Intersect求列表交集时部分元素未显示问题求助
列表交集仅返回部分元素的问题分析与解决
问题出在字符串分割后的元素格式上:原代码中"F, H, S, W".Split(',')会生成带前导空格的元素,比如" H"、" S",而drives列表中的元素是无空格的"H",Intersect方法对字符串做严格的相等匹配(区分内容、空格),因此只有完全匹配的"F"被识别为公共元素。
解决办法
有两种常用的修复方式:
方式1:分割时使用带空格的分隔符
直接按", "(逗号加空格)分割,避免生成带空格的元素:
var control = "F, H, S, W".Split(new[] {", "}, StringSplitOptions.RemoveEmptyEntries).ToList(); var drives = new List<string> {"C", "D", "E", "F", "H" }; var common = drives.Intersect(control).ToList(); common.ForEach(x => MessageBox.Show(x));
方式2:分割后去除每个元素的空白字符
如果不确定分隔符是否统一(比如可能存在逗号后多空格的情况),可以对分割后的每个元素做Trim处理:
var control = "F, H, S, W".Split(',') .Select(s => s.Trim()) .ToList(); var drives = new List<string> {"C", "D", "E", "F", "H" }; var common = drives.Intersect(control).ToList(); common.ForEach(x => MessageBox.Show(x));
两种方式都能让control中的元素和drives中的元素完全匹配,最终得到F和H两个公共元素。
内容的提问来源于stack exchange,提问作者Johnny Wind
相关产品推荐
相关产品推荐

