Im Anschluss an Sergeys Antwort , ich denke , die generische Ausführung mehr im Einklang mit Fowler ist Range
Idee und löst einige der Probleme mit dieser Antwort wie in der Lage , das haben Includes
Methoden innerhalb einer generischen Klasse von Zwang T
wie 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;
}