c# - 同步 2 个列表

标签 c# .net-3.5

同步 2 个列表的最佳最快方法是什么?

public class UserGroup
    {
        public UserGroup(string group, string user)
        {
            this.Group = group;
            this.User = user;
        }
        public string Group { get; set; }
        public string User { get; set; }
    }


IList<UserGroup> userGroup1 = new IList<UserGroup>();
IList<UserGroup> userGroup2 = new IList<UserGroup>();

每个组有不同数量的成员。 我怎样才能找出不同之处并将两者合并到一个新列表中?

PS:如果效率更高,我可以将类型从 IList 更改为任何类型。

谢谢

最佳答案

所以首先我们需要一种比较这些对象的有效方法。由于默认的 EqualsGetHashCode 实现在您的上下文中没有用处,您需要覆盖它们,或者创建一个 IEqualityComparer。我做了后者,如果你愿意,你可以随意做前者。这是一个简单的比较器:

public class UserGroupComparer : IEqualityComparer<UserGroup>
{
    public bool Equals(UserGroup x, UserGroup y)
    {
        return x.Group == y.Group && x.User == y.User;
    }

    public int GetHashCode(UserGroup obj)
    {
        return 37 * obj.Group.GetHashCode() + 19 * obj.User.GetHashCode();
    }
}

现在您有了这个比较器,您可以利用 LINQ 为您完成这项工作:

var combinedList = userGroup1.Union(userGroup2, new UserGroupComparer())
    .ToList();

这将包含任一列表中的所有用户组,但没有任何重复项。

关于c# - 同步 2 个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16303312/

相关文章:

c# - 在 WPF 中创建键绑定(bind)

c# - 转换为 int16、int32、int64 - 你怎么知道选择哪一个?

javascript - Blazor 中的级联下拉菜单

c# - 如何将整数转换为它的语言表示形式?

c# - 什么是用于加载系统配置属性的 .net 层次结构

c# - 设备驱动程序 DLL 阻塞与非阻塞?

c# - 使用 Regex.Matches 计算字符串中的特定单词时出错

vb.net - window 服务

.net - WCF - 如何增加消息大小配额

C# 3.5 - 跨网络连接命名管道