CS0449 de erro do compilador

Mensagem de erro

A restrição 'classe' ou 'struct' deve vir antes de qualquer Outros restrição

As restrições no parâmetro de tipo de um tipo genérico ou método devem ocorrer em uma ordem específica: class ou struct deve ser primeiro, se estiver presente, então qualquer interface restrições e finalmente qualquer restrição de construtor. Este erro é causado pelo class ou struct restrição não aparecendo primeiro. Para resolver esse erro, reordene as cláusulas de restrição.

Exemplo

O exemplo a seguir gera CS0449.

// CS0449.cs
// compile with: /target:library
interface I {}
public class C4 
{
   public void F1<T>() where T : class, struct, I {}   // CS0449
   public void F2<T>() where T : I, struct {}   // CS0449
   public void F3<T>() where T : I, class {}   // CS0449

   // OK
   public void F4<T>() where T : class {}
   public void F5<T>() where T : struct {}
   public void F6<T>() where T : I {}
}