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();
}

}