Przeczytaj w języku angielskim

Udostępnij za pośrednictwem


Błąd kompilatora CS0313

Nie można użyć typu "type1" jako parametru typu "nazwa parametru" w typie ogólnym lub metodzie "type2". Typ dopuszczalny wartości null "type1" nie spełnia ograniczenia "type2". Typy dopuszczane wartości null nie mogą spełniać żadnych ograniczeń interfejsu.

Typ wartości dopuszczanej do wartości null nie jest równoważny z jego odpowiednikiem, który nie jest dopuszczalny do wartości null. W poniższym przykładzie ograniczenie jest spełnione, ale ImplStruct? nie dlatego, ImplStruct że Nullable<ImplStruct> nie implementuje BaseInterfaceelementu .BaseInterface

Aby poprawić ten błąd

  1. Korzystając z poniższego kodu w przykładzie, jednym z rozwiązań jest określenie zwykłego ImplStruct argumentu jako pierwszego typu w wywołaniu metody TestMethod. Następnie zmodyfikuj TestMethod , aby utworzyć wersję Implstruct dopuszczaną do wartości null w instrukcji return:

    C#
    return new Nullable<T>(t);  
    

Przykład

Poniższy kod generuje CS0313:

C#
// 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()  
    { }  
}  

Zobacz też