Здравствуйте, Sinix, Вы писали:
S>Какие будут идеи?
Если от второго параметра не требовать IRangeFactory (а я затрудняюсь сказать где может понадобиться), то так:
static class RangeExtension
{
public static V Union<T,V>(this V a, IRange<T> b) where V:IRangeFactory<T,V> =>
a.Create(
a.From <= b.From ? a.From : b.From,
a.To >= b.To ? a.To : b.To);
public static V Intersect<T, V>(this V a, IRange<T> b) where V : IRangeFactory<T, V> =>
a.Create(
a.From >= b.From ? a.From : b.From,
a.To <= b.To ? a.To : b.To);
}
ЗЫ. Бонус тоже мой