public class AlarmTimeRangeComparer : IEqualityComparer
{
public bool Equals(Alarm x, Alarm y)
{
if (x == null || y == null) return false;
// 仅处理相同ID的报警
if (x.Id != y.Id) return false;
// 判断时间范围是否包含:A包含B或B包含A
bool xContainsY = x.StartTime <= y.StartTime && x.EndTime >= y.EndTime;
bool yContainsX = y.StartTime <= x.StartTime && y.EndTime >= x.EndTime;
//return xContainsY || yContainsX;
if (xContainsY || yContainsX)
{
return true;
}
else
{
//部分重合的数据的处理
if (y.StartTime > x.StartTime && y.StartTime <= x.EndTime)
{
x.EndTime = y.EndTime;
return true;
}
else if (x.StartTime > y.StartTime && x.StartTime <= y.EndTime)
{
x.StartTime = y.StartTime;
return true;
}
return false;
}
}
public int GetHashCode(Alarm obj)
{
// 哈希码仅依赖ID,确保相同ID的报警进入同一哈希桶
return obj.Id.GetHashCode();
}
}