如果我尝试这样做——我对 oldList.Except(newList) 的调用似乎返回了所有项目——没有比较有效。
List<ControlAndTopLevelControlPair> oldOnly = oldList.Except( newList ).ToList();
public class ControlAndTopLevelControlPair : IEqualityComparer<ControlAndTopLevelControlPair>
{
public int CONTROLOI { get; set; }
public int VIEWCONTROL_OI { get; set; }
public bool Equals( ControlAndTopLevelControlPair x, ControlAndTopLevelControlPair y )
{
return x.CONTROLOI.Equals( y.CONTROLOI ) && x.VIEWCONTROL_OI.Equals( y.VIEWCONTROL_OI );
}
public int GetHashCode( ControlAndTopLevelControlPair obj )
{
return obj.CONTROLOI.GetHashCode( ) ^ obj.VIEWCONTROL_OI.GetHashCode( );
}
但是,如果我定义一个自定义比较器,那么以下工作:
List<ControlAndTopLevelControlPair> oldOnly = oldList.Except( newList, new ControlAndTopLevelControlPairComparer() ).ToList( );
public class ControlAndTopLevelControlPairComparer : IEqualityComparer<ControlAndTopLevelControlPair>
{
public bool Equals( ControlAndTopLevelControlPair x, ControlAndTopLevelControlPair y )
{
return x.CONTROLOI.Equals( y.CONTROLOI ) && x.VIEWCONTROL_OI.Equals( y.VIEWCONTROL_OI );
}
public int GetHashCode( ControlAndTopLevelControlPair obj )
{
return obj.CONTROLOI.GetHashCode() ^ obj.VIEWCONTROL_OI.GetHashCode();
}
}