private static Range <T> TryCreateCore <T>( T from, RangeBoundaryFromKind fromKind, T to, RangeBoundaryToKind toKind) => RangeBoundaryFrom <T> .IsValid(from) && RangeBoundaryTo <T> .IsValid(to) ? TryCreate( RangeBoundaryFrom <T> .AdjustAndCreate(from, fromKind), RangeBoundaryTo <T> .AdjustAndCreate(to, toKind)) : Range <T> .Empty;
public static bool EndsBefore <T>(this Range <T> range, T value) => range.IsNotEmpty && RangeBoundaryTo <T> .IsValid(value) && range.To < Range.BoundaryTo(value);
public bool EndsBefore(T value) => IsNotEmpty && RangeBoundaryTo <T> .IsValid(value) && To < Range.BoundaryTo(value);
public static bool IsValid <T>(T from, T to) => RangeBoundaryFrom <T> .IsValid(from) && RangeBoundaryTo <T> .IsValid(to) && IsValid(BoundaryFrom(from), BoundaryTo(to));