Erreur du compilateur CS0313
Mise à jour : novembre 2007
Message d'erreur
Le type 'type1' ne peut pas être utilisé en tant que paramètre de type 'nom de paramètre' dans le type ou la méthode générique 'type2'. Le type nullable 'type1' ne satisfait pas à la contrainte 'type2'. Les types nullables ne peuvent satisfaire à aucune contrainte d'interface.
The type 'type1' cannot be used as type parameter 'parameter name' in the generic type or method 'type2'. The nullable type 'type1' does not satisfy the constraint of 'type2'. Nullable types cannot satisfy any interface constraints.
Un type nullable ne correspond pas à son équivalent non nullable. Dans l'exemple suivant, ImplStruct satisfait la contrainte BaseInterface mais pas ImplStruct? car Nullable<ImplStruct> n'implémente pas BaseInterface.
Pour corriger cette erreur
L'exemple de code suivant illustre l'une des solutions qui consiste à spécifier un ImplStruct ordinaire en tant que premier argument de type dans l'appel à TestMethod. Modifiez ensuite TestMethod pour créer une version nullable de Implstruct dans son instruction return :
return new Nullable<T>(t);
Exemple
Le code suivant génère l'erreur 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()
{ }
}