如何在非泛型集合上使用Except操作符

本文关键字:Except 操作符 集合 泛型 | 更新日期: 2023-09-27 18:15:09

我已经自动生成了由VS包装器的WMI集合女巫看起来像这样:

// Enumerator implementation for enumerating instances of the class.
    public class DiskDriveCollection : object, ICollection {
        private ManagementObjectCollection privColObj;
        public DiskDriveCollection(ManagementObjectCollection objCollection) {
            privColObj = objCollection;
        }
        public virtual int Count {
            get {
                return privColObj.Count;
            }
        }
        public virtual bool IsSynchronized {
            get {
                return privColObj.IsSynchronized;
            }
        }
        public virtual object SyncRoot {
            get {
                return this;
            }
        }
        public virtual void CopyTo(System.Array array, int index) {
            ...
        }
        public virtual System.Collections.IEnumerator GetEnumerator() {
            return new DiskDriveEnumerator(privColObj.GetEnumerator());
        }
        public class DiskDriveEnumerator : object, System.Collections.IEnumerator {
            private ManagementObjectCollection.ManagementObjectEnumerator privObjEnum;
            public DiskDriveEnumerator(ManagementObjectCollection.ManagementObjectEnumerator objEnum) {
                privObjEnum = objEnum;
            }
            public virtual object Current {
                get {
                    return new DiskDrive(((System.Management.ManagementObject)(privObjEnum.Current)));
                }
            }
            public virtual bool MoveNext() {
                return privObjEnum.MoveNext();
            }
            public virtual void Reset() {
                privObjEnum.Reset();
            }
        }
    }

如何对这个非泛型集合使用except操作符?

如何在非泛型集合上使用Except操作符

ICollection继承自IEnumerable,并且有一个OfType方法取IEnumerable并返回IEnumerable<T>,那么当你得到IEnumerable<T>时,你可以很容易地使用所有的LINQ方法,例如:

myCollection.OfType<object>()
.Except(myOtherCollection.OfType<object>(), new CustomEqualityComparer());

既然你有对象,你需要为它们实现一个相等比较器,并把它传递给Except方法,否则Except会通过引用来比较你的对象。