Číst v angličtině

Sdílet prostřednictvím


Chyba kompilátoru CS0313

Typ type1 nelze použít jako parametr typu "název parametru" v obecném typu nebo metodě type2. Typ s možnou hodnotou null 'type1' nesplňuje omezení typu 'type2'. Typy s možnou hodnotou null nemohou splňovat žádná omezení rozhraní.

Typ hodnoty s možnou hodnotou null není ekvivalentní jeho protějšku bez hodnoty null. V následujícím příkladu splňuje BaseInterface omezení, ImplStruct ale ImplStruct? ne, protože Nullable<ImplStruct> neimplementuje BaseInterface.

Oprava této chyby

  1. Použití kódu, který následuje jako příklad, je jedním z řešení určit obyčejné ImplStruct jako první typ argumentu TestMethodvolání . Potom upravte TestMethod , aby se ve svém návratovém příkazu vytvořila verze s možnou Implstruct hodnotou null:

    return new Nullable<T>(t);  
    

Příklad

Následující kód vygeneruje 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()  
    { }  
}  

Viz také