using System.Collections.Generic;
public static void Main()
Console.WriteLine("rangeTest");
var contiguousRanges = new FeeDTO
Fees = new List<IndividualFee>
new IndividualFee{ MinValue = 0, MaxValue = 99 },
new IndividualFee{ MinValue = 100, MaxValue = 199 },
new IndividualFee{ MinValue = 200, MaxValue = 299 }
var spacedRanges = new FeeDTO
Fees = new List<IndividualFee>
new IndividualFee{ MinValue = 0, MaxValue = 99 },
new IndividualFee{ MinValue = 200, MaxValue = 299 },
new IndividualFee{ MinValue = 400, MaxValue = 499 }
var invertedRanges = new FeeDTO
Fees = new List<IndividualFee>
new IndividualFee{ MinValue = 99, MaxValue = 0 },
new IndividualFee{ MinValue = 200, MaxValue = 299 },
new IndividualFee{ MinValue = 400, MaxValue = 499 }
var overlappedRanges = new FeeDTO
Fees = new List<IndividualFee>
new IndividualFee{ MinValue = 0, MaxValue = 99 },
new IndividualFee{ MinValue = 50, MaxValue = 149 },
new IndividualFee{ MinValue = 100, MaxValue = 199 }
Console.WriteLine($"contiguous overlap:{IsOverlap(contiguousRanges.Fees)}");
Console.WriteLine($"spaced overlap:{IsOverlap(spacedRanges.Fees)}");
Console.WriteLine($"inverted overlap:{IsOverlap(invertedRanges.Fees)}");
Console.WriteLine($"overlaped overlap:{IsOverlap(overlappedRanges.Fees)}");
public static bool IsOverlap(IEnumerable<IndividualFee> fees)
var limit = int.MinValue;
foreach (var fee in fees.OrderBy(f => f.MinValue))
if (fee.MinValue <= limit)
if (fee.MaxValue <= limit)
public List<IndividualFee> Fees { get; set; }
public class IndividualFee
public Int32 MinValue { get; set; }
public Int32 MaxValue { get; set; }