Genéricos permitem escrever classes e métodos parametrizados por um tipo, fornecendo segurança de tipo e reutilizabilidade sem duplicação de código ou casts. Restrições restringem quais tipos um parâmetro genérico pode ser, permitindo o uso seguro de seus membros. Genéricos são generalizados em C# (a biblioteca inteira de coleções os utiliza).
O problema que genéricos resolvem
=> arr[i];
=> arr[i];
x = Get([] { , , }, );
