При створенні типів generic, ключове слово where використовується для того, щоб описати спеціальні обмеження, які дозволяють використовувати певні типи, які можуть застосовуватись як аргумент для параметру типу який використовується в декларації generic. Наприклад, ви можете визначити клас типу generic, MyGenericClass, таким способом що тип, який задається в якості параметру T має бути типом, що реалізує інтерфейс IComparable: public class MyGenericClass<T> where T:IComparable { }

Конструкція where може також містити обмеження на наявність конструктора. Можна створювати екземпляри зазначеного в параметрі типу за допомогою оператора new, але для цього вам необхідно додати обмеження на наявність у даного типу конструктора по замовчуванню (без параметрів). Конструкція new() дозволяє повідомити компілятору, що будь-який аргумент типу має мати доступним конструктор без параметрів.

Наприклад: public class MyGenericClass<T> where T : IComparable, new() { // Подібна конструкція не можлива без обмеження new(): T item = new T(); }

Конструкція new() завжди є останньою у виразі where.

Якщо існує декілька параметрів типу, обмеження для них можна задавати по черзі: class Dictionary<TKey, TVal> where TKey : IComparable, IEnumerable where TVal : IMyInterface { public void Add(TKey key, TVal val)