You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何比较两个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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 18:52:08