Эквивалентны struct и ValueType - PullRequest
0 голосов
/ 06 августа 2020

При определении ограничения типа generi c эти два эквивалента:

public void Method<T>(T parameter) where T : struct { }

и

public void Method<T>(T parameter) where T : ValueType { }

Из MS docs , я сильно подозреваю, что они одинаковы:

Хотя ValueType является неявным базовым классом для типов значений, вы не можете создать класс, наследующий от ValueType напрямую. Вместо этого отдельные компиляторы предоставляют ключевое слово или конструкцию языка (например, структуру в C# и Структура… Конечная структура в Visual Basi c) для поддержки создания типов значений.

Но я хочу чтобы убедиться в этом.

1 Ответ

5 голосов
/ 06 августа 2020

Они не совпадают, потому что второй не компилируется :

ошибка CS0702: ограничение не может быть специальным классом ValueType

Однако да: T : struct означает «T - это тип значения». Тонкое различие состоит в том, что теоретически Method<ValueType>() сам удовлетворяет T : ValueType, а ValueType - это class, а не struct.

Кроме того, T : struct не позволяет использовать обнуляемый T?, то есть Method<int?> недопустимо, даже если int? (он же Nullable<int>) является типом значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...