我正在使用 Enumerable.Except() 将skipSerialNumbers项从activateSerialNumbers中排除。
activatedSerialNumbers = activatedSerialNumbers
.Except(skipSerialNumbers, new SamWithLicenseComparer()).ToList();
SamWithLicenseComparer是:
internal class SamWithLicenseComparer : IEqualityComparer<SamWithLicense>
{
public bool Equals(SamWithLicense x, SamWithLicense y)
{
if (ReferenceEquals(x, y))
return true;
if (ReferenceEquals(x, null) || ReferenceEquals(y, null))
return false;
if(x.Name.ToLower() != y.Name.ToLower())
return false;
return true;
}
public int GetHashCode(SamWithLicense sam)
{
if (ReferenceEquals(sam, null))
return 0;
return sam.Name == null ? 0 : sam.Name.ToLower().GetHashCode();
}
}
结果我得到了意想不到的价值,因为我发现,activatedSerialNumbers中的项目会与它们自己进行比较。但逻辑是它们可能具有相同的名称,任务只是从skipSerialNumbers中删除所有项目。如何做到这一点避免额外的比较?