using System.Collections.Generic;
public static void Main()
var l = new List<Range> (){
Start = DateTime.Now.AddHours(1),
End = DateTime.Now.AddHours(3)
Start = DateTime.Now.AddHours(2),
End = DateTime.Now.AddHours(6)
Start = DateTime.Now.AddHours(6),
End = DateTime.Now.AddHours(8)
static void DetectOverlap(List<Range> l)
var overlap = l.Any(x => x.Id != r.Id
&& ((r.Start == x.Start && r.End == x.End)
|| (r.Start >= x.Start && r.Start < x.End)
|| (r.End > x.Start && r.End <= x.End)));
Console.WriteLine("Overlap detected");
throw new Exception("Overlapping range detected");
Console.WriteLine("Clean ranges");
public int Id {get; set;}
public DateTime Start {get; set;}
public DateTime End {get; set;}