Я не могу комментировать производительность (для этого вам понадобится профилирование и т. Д.), Но одно интересное изменение здесь - это ограниченный код операции, который используется в частности с дженериками. Преимущество здесь в том, что для такого метода, как:
static void DoSomething<T>(T x, T y) where T : IComparable<T>
{
if(x.CompareTo(y) < 0) { /* whatever */ }
}
он будет использовать ограниченный вызов для CompareTo
, что позволяет ему либо использовать статический вызов реализации метода для типа значения (без unbox), либо использовать виртуальный -вызовите, если это ссылочный тип. Обычно для вызова метода на основе интерфейса для типа значения требуется поле, поэтому это очень полезно.