Errore del compilatore CS0315

Aggiornamento: novembre 2007

Messaggio di errore

Impossibile utilizzare tipo 'Tipovalore' come parametro di tipo 'T' nel tipo o metodo generico 'TipooMetodo'< T >. Nessuna conversione boxing o conversione parametro di tipo da 'Tipovalore' a 'Tiporiferimento'.
The type 'valueType' cannot be used as type parameter 'T' in the generic type or method 'TypeorMethod<T>'. There is no boxing conversion from 'valueType' to 'referenceType'.

Questo errore si verifica quando si vincola un tipo generico a una particolare classe e si tenta di costruire un'istanza di tale classe mediante un tipo di valore che non può essere sottoposto a boxing in modo implicito.

Per correggere l'errore

  • Una soluzione è ridefinire la struttura come classe.

Esempio

Nell'esempio seguente viene generato l'errore CS0315:

// cs0315.cs
public class ClassConstraint { }
public struct ViolateClassConstraint { }

public class Gen<T> where T : ClassConstraint
{       
}
public class Test
{
    public static int Main()
    {
        Gen<ViolateClassConstraint> g = new Gen<ViolateClassConstraint>(); //CS0315
        return 1;
    }
}

Vedere anche

Riferimenti

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

Boxing e unboxing (Guida per programmatori C#)