Рассмотрим эту тривиальную функцию:
public static bool IsPositive(IComparable<int> value)
{
return value.CompareTo(0) > 0;
}
Теперь, если я передаю int
этому методу, он получает коробку. Не было бы поэтому лучше определить вышеупомянутый метод следующим образом:
public static bool IsPositive<T>(T value) where T : IComparable<int>
{
return value.CompareTo(0) > 0;
}
Используя общее ограничение таким образом, я могу достичь точно такой же функциональности, как и код выше, с дополнительным преимуществом, которое не требует бокса (так как вызов IsPositive<int>
принимает параметр типа int
).
Приведенный выше примерный код явно не имеет смысла. Но мой более широкий вопрос: , не всегда ли смысл определять методы последним способом (используя общее ограничение, а не иметь параметр какого-либо типа интерфейса), чтобы избежать потенциального бокса типов значений?
Я подозреваю, что ответ скорее всего будет "да", но он требует большего набора текста, и во многих случаях встретить тип значения будет очень маловероятным, например, когда метод принимает некоторые IEnumerable<T>
. " Но мне интересно, есть ли большая разница между этими подходами, которые ускользают от меня в данный момент.