Monday, October 31, 2005 7:06 PM
the following class cleans up ugly code that tests whether value a is between value b and value c. it works with any class implementing IComparable.
so stuff like this:
if(myDate >= startDate && myDate <= endDate) ..
becomes this:
if(goodInterval.IsInInterval(myDate))
=========================
<code>
using System;
namespace x.Utility
{
public enum IntervalComparison
{
Inclusive =0,
Exclusive
}
/// <summary>
/// Provides interval needs, defaults to Inclusive on start and end
/// </summary>
public class Interval
{
private IComparable _start;
private IComparable _end;
private IntervalComparison _startComparison = IntervalComparison.Inclusive;
private IntervalComparison _endComparison = IntervalComparison.Inclusive;
public Interval(IComparable start, IComparable end)
{
_start = start;
_end = end;
}
public Interval(IComparable start, IComparable end, IntervalComparison startComparison, IntervalComparison endComparison)
{
_start = start;
_end = end;
_startComparison = startComparison;
_endComparison = endComparison;
}
public IComparable IntervalStart
{
get{ return _start; }
}
public IComparable IntervalEnd
{
get{ return _end; }
}
public bool IsInInterval(IComparable comparable)
{
if(_startComparison == IntervalComparison.Inclusive)
{
if(1 == _start.CompareTo(comparable)) return false;
}
if(_startComparison == IntervalComparison.Exclusive)
{
if(-1 != _start.CompareTo(comparable) ) return false;
}
if(_endComparison == IntervalComparison.Inclusive)
{
if(0 > _end.CompareTo(comparable) ) return false;
}
if(_endComparison == IntervalComparison.Exclusive)
{
if(1 != _end.CompareTo(comparable) ) return false;
}
return true;
}
}
}
</code>