如何比较两个Guid列表?解决C#中列表Equals返回false的问题
正确比较两个Guid列表的方法
你用List<T>.Equals()返回false是因为这个方法默认比较的是对象引用,而不是集合里的元素内容——哪怕两个列表里的Guid完全一样,只要是不同的List实例,结果就是false。
下面是几种可行的解决方案:
1. 按顺序比较元素(推荐)
用LINQ的SequenceEqual方法,它会逐个比较两个序列的元素,只有当元素数量相同、顺序一致且每个对应位置的Guid都相等时,才返回true。
using System.Linq; // 需要引用这个命名空间 foreach (var detailModel in details) { var values = detailModel.Items.ToList(); var selected = /* 你的Guid列表 */; // 严格按顺序比较 var isEqual = values.SequenceEqual(selected); }
如果不关心元素的顺序,先对两个列表排序再比较:
var isEqual = values.OrderBy(g => g).SequenceEqual(selected.OrderBy(g => g));
2. 不关心顺序时的另一种写法
如果你的Guid列表里没有重复元素,可以通过检查元素数量一致,且每个元素都存在于另一个列表中来判断:
var isEqual = values.Count == selected.Count && values.All(g => selected.Contains(g));
但如果列表里有重复的Guid,这种方法会出错(比如一个列表有两个相同Guid,另一个只有一个,结果会误判为相等),这种情况还是用排序后SequenceEqual更稳妥。
内容的提问来源于stack exchange,提问作者ar.gorgin
相关产品推荐
相关产品推荐

