Leggere in inglese

Condividi tramite


Errore del compilatore CS0313

Non è possibile usare il tipo 'type1' come parametro di tipo 'parameter name' nel metodo o nel tipo generico 'type2'. Il tipo nullable 'type1' non soddisfa il vincolo di 'type2'. I tipi nullable non soddisfano i vincoli di interfaccia.

Un tipo valore che ammette i valori Null non è equivalente alla controparte che non ammette i valori Null. Nell'esempio seguente ImplStruct soddisfa il vincolo BaseInterface ma ImplStruct? non lo soddisfa perché Nullable<ImplStruct> non implementa BaseInterface.

Per correggere l'errore

  1. Se si usa il codice di esempio seguente, una soluzione è specificare un oggetto ImplStruct comune come primo argomento di tipo nella chiamata a TestMethod. Quindi modificare TestMethod per creare una versione nullable di Implstruct nell'istruzione return:

    return new Nullable<T>(t);  
    

Esempio

Il codice seguente genera l'errore CS0313:

// cs0313.cs  
public interface BaseInterface { }  
public struct ImplStruct : BaseInterface { }  
  
public class TestClass  
{  
    public T? TestMethod<T, U>(T t) where T : struct, U  
    {  
        return t;  
    }  
}  
  
public class NullableTest  
{  
    public static void Run()  
    {  
  
        TestClass tc = new TestClass();  
        tc.TestMethod<ImplStruct?, BaseInterface>(new ImplStruct?()); // CS0313  
    }  
    public static void Main()  
    { }  
}  

Vedi anche