Im Anschluss an Sergeys Antwort , ich denke , die generische Ausführung mehr im Einklang mit Fowler ist RangeIdee und löst einige der Probleme mit dieser Antwort wie in der Lage , das haben IncludesMethoden innerhalb einer generischen Klasse von Zwang Twie IComparable<T>. Es ist auch unveränderlich, wie Sie es von Typen erwarten würden, die die Funktionalität anderer Werttypen wie erweitern DateTime.
public struct Range<T> where T : IComparable<T>
{
public Range(T start, T end)
{
Start = start;
End = end;
}
public T Start { get; }
public T End { get; }
public bool Includes(T value) => Start.CompareTo(value) <= 0 && End.CompareTo(value) >= 0;
public bool Includes(Range<T> range) => Start.CompareTo(range.Start) <= 0 && End.CompareTo(range.End) >= 0;
}