Freigeben über


Compilerfehler CS0313

Aktualisiert: November 2007

Fehlermeldung

Der Typ "Typ1" kann in dem/r generischen Typ oder Methode "Typ2" nicht als Typparameter "Parametername" verwendet werden. Der Typ "Typ1", der NULL-Werte zulässt, entspricht nicht der Einschränkung von "Typ2". Typen, die NULL-Werte zulassen, können keine Schnittstelleneinschränkungen erfüllen.
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.

Ein Typ, der NULL-Werte zulässt, ist nicht äquivalent zu seinem Gegenstück, das keine NULL-Werte zulässt. Im folgenden Beispiel erfüllt ImplStruct die BaseInterface-Einschränkung, ImplStruct? tut dies jedoch nicht, da Nullable<ImplStruct> kein BaseInterface implementiert.

So beheben Sie diesen Fehler

  • Ausgehend vom folgenden Beispielcode wäre eine Lösung die Angabe einer gewöhnlichen ImplStruct als erstes Typargument im Aufruf von TestMethod. Ändern Sie dann TestMethod, um in der return-Anweisung eine Version von Implstruct zu erstellen, die Null-Werte zulässt:

    return new Nullable<T>(t);
    

Beispiel

Durch den folgenden Code wird der Fehler CS0313 ausgelöst:

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

Siehe auch

Referenz

Typen, die NULL-Werte zulassen (C#-Programmierhandbuch)