где T: struct
Аргумент типа должен быть типом значения.Можно указать любой тип значения, кроме Nullable.См. Использование Обнуляемых Типов (Руководство по программированию в C #) для получения дополнительной информации.
где T: класс
Аргумент типа должен быть ссылочным типом, включая любой класс, интерфейсделегат или тип массива.(См. Примечание ниже.)
где T: new () Аргумент типа должен иметь открытый конструктор без параметров.При использовании в сочетании с другими ограничениями, ограничение new () должно указываться последним.
где T: [имя базового класса]
Аргумент типа должен быть илинаследуется от указанного базового класса.
где T: [имя интерфейса]
Аргумент типа должен быть или реализовывать указанный интерфейс.Можно указать несколько ограничений интерфейса.Ограничительный интерфейс также может быть универсальным.
, где T: U
Аргумент типа, предоставленный для T, должен быть или получен из аргумента, предоставленного для U. Это называетсяограничение обнаженного типа.