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
.
Se si usa il codice di esempio seguente, una soluzione è specificare un oggetto
ImplStruct
comune come primo argomento di tipo nella chiamata aTestMethod
. Quindi modificareTestMethod
per creare una versione nullable diImplstruct
nell'istruzione return:return new Nullable<T>(t);
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()
{ }
}
Feedback su .NET
.NET è un progetto di open source. Selezionare un collegamento per fornire feedback: