返回两个枚举数之间的差异

本文关键字:之间 枚举 两个 返回 | 更新日期: 2023-09-27 18:13:20

我正在尝试确定两个集合之间的差异。

private ObservableCollection<SomeObject> _objectList = null;
private ObservableCollection<SomeObject> _cachedObjectList = null;

SomeObject实现IEquatable<SomeObject>

我使用以下命令来确定我的两个集合是否有任何不同:

this._objectList.ToList().OrderBy(x => x.Id).SequenceEqual(this._cachedObjectList.ToList().OrderBy(x => x.Id));
  • _cachedObjectList集合不会改变。
  • 您可以添加,删除或修改_objectList集合中的对象。

如何返回一个新列表,其中包含两个集合中任何新添加、删除或以其他方式修改的对象

任何帮助都将非常感激!

SomeObject的等价实现:

public class SomeObject : IEquatable<SomeObject>
{
        public int GetHashCode(SomeObject object)
        {
            return base.GetHashCode();
        }
        public bool Equals(SomeObject other)
        {
            bool result = true;

            if (Object.ReferenceEquals(other, null))
            {
                result = false;
            }
            //Check whether the compared objects reference the same data.
            if (Object.ReferenceEquals(this, other))
            {
                result = true;
            }
            else
            {
                // if the reference isn't the same, we can check the properties for equality
                if (!this.Id.Equals(other.Id))
                {
                    result = false;
                }
                if (!this.OtherList.OrderBy(x => x.Id).ToList().SequenceEqual(other.OtherList.OrderBy(x => x.Id).ToList()))
                {
                    result = false;
                }
            }
            return result;
        }
    }
}
编辑:

我只想要更改,如果_objectList包含一个修改过的对象,基于equatable . equals(),那么我希望它返回。否则,返回列表中的新对象或删除的对象。

返回两个枚举数之间的差异

你会发现

var newAndChanged = _objectList.Except(_cachedObjectList);
var removedAndChanged = _cachedObjectList.Except(_objectList);
var changed = newAndChanged.Concat(removedAndChanged);