Läs på engelska

Dela via


Kompilatorfel CS0313

Typen "type1" kan inte användas som typparameterns parameternamn i den generiska typen eller metoden "type2". Den nullbara typen "type1" uppfyller inte villkoret "type2". Nullbara typer kan inte uppfylla några gränssnittsbegränsningar.

En nullbar värdetyp motsvarar inte dess icke-nullbara motsvarighet. I exemplet som följer uppfyller villkoret BaseInterface men ImplStructImplStruct? inte eftersom Nullable<ImplStruct> inte implementerar BaseInterface.

Så här åtgärdar du det här felet

  1. Med hjälp av koden som följer som exempel är en lösning att ange ett vanligt ImplStruct som det första typargumentet i anropet till TestMethod. Ändra TestMethod sedan för att skapa en null-version av Implstruct i sin retursats:

    return new Nullable<T>(t);  
    

Exempel

Följande kod genererar 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()  
    { }  
}  

Se även