Errore del compilatore CS0311

Aggiornamento: novembre 2007

Messaggio di errore

Impossibile utilizzare tipo 'tipo1' come parametro di tipo 'T' nel tipo o metodo generico '<nome>'. Nessuna conversione dei riferimenti implicita da 'tipo1' a 'tipo2'.
The type 'type1' cannot be used as type parameter 'T' in the generic type or method '<name>'. There is no implicit reference conversion from 'type1' to 'type2'.

Quando viene applicato un vincolo a un parametro di tipo generico, deve esistere un'identità implicita o una conversione dei riferimenti dall'argomento concreto al tipo del vincolo.

Per correggere l'errore

  1. Modificare l'argomento in uso per creare la classe.

  2. Se si possiede la classe, è possibile rimuovere il vincolo o tentare di consentire un riferimento implicito o una conversione di identità. Ad esempio, è possibile fare in modo che il secondo tipo erediti dal primo.

Esempio

// cs0311.cs
class B{}
class C{}
class Test<T> where T : C
{ }

class Program
{
    static void Main()
    {
        Test<B> test = new Test<B>(); //CS0311
    }
}

Se si verifica questo errore quando si tenta di utilizzare un argomento del tipo di valore, una conversione numerica implicita, ad esempio da short a int, non soddisfa un parametro di tipo generico.

Vedere anche

Riferimenti

Vincoli sui parametri di tipo (Guida per programmatori C#)