如何在非泛型集合上使用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操作符?
ICollection
继承自IEnumerable
,并且有一个OfType
方法取IEnumerable
并返回IEnumerable<T>
,那么当你得到IEnumerable<T>
时,你可以很容易地使用所有的LINQ方法,例如:
myCollection.OfType<object>()
.Except(myOtherCollection.OfType<object>(), new CustomEqualityComparer());
既然你有对象,你需要为它们实现一个相等比较器,并把它传递给Except
方法,否则Except
会通过引用来比较你的对象。