2016-09-22 1 views
1

я написал общий метод расширения, чтобы увидеть, если ключ находится в определенном диапазоне:Что определяет, могу ли я использовать операторы сравнения?

public static bool IsInRange(this Key key, Key lowerBoundKey, Key upperBoundKey) 
{ 
    return lowerBoundKey <= key && key <= upperBoundKey; 
} 

Это кажется достаточно простым, но предположу, что я хочу написать общий метод эквивалент, который будет работать с любым типом, который может использовать оператор <= сравнения:

public static bool IsInRange(this T value, T lowerBound, T upperBound) 
{ 
    return lowerBound <= value && value <= upperBound; 
} 

Как применить where T : ISomethingIDontKnow, так что я могу сделать это скомпилировать?

+0

Не уверен, но если реализовать IComparable может быть достаточно – Paparazzi

+0

', где T: IComparable' должно быть достаточно для этого, чтобы работать. – Nkosi

ответ

3

Для этого достаточно преобразовать метод в общий метод с where T : IComparable.

public static bool IsInRange<T>(this T value, T lowerBound, T upperBound) 
    where T : IComparable { 

    return value != null && lowrBound != null && upperBound !=null 
      && lowerBound.CompareTo(value) <= 0 && value.CompareTo(upperBound) <= 0; 
}