Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

GD0302: The generic type parameter must be annotated with the MustBeVariant attribute

Regel-ID

GD0302

Kategorie

Verwendung

Fix führt oder führt nicht zu Kompatibilitätsbruch

Kompatibilitätsbruch

Standardmäßig aktiviert

Ja

Ursache

Ein generischer Typ wird für ein generisches Typ-Argument angegeben, wenn ein Variant-kompatibler-Typ erwartet wird, aber der angegebene generische Typ nicht mit dem [MustBeVariant]-Attribut annotiert ist.

Regelbeschreibung

Wenn ein Parameter von generischen Typs mit dem Attribut [MustBeVariant] annotiert ist, muss der generische Typ ein variantenkompatibler Typ sein. Wenn der verwendete Typ ebenfalls ein generischer Typ ist, muss dieser generische Typ ebenfalls mit dem Attribut [MustBeVariant] annotiert werden. Zum Beispiel unterstützt der generische Typ Godot.Collections.Array<T> nur Elemente eines Typs, der in Variant konvertiert werden kann, ein generischer Typ kann angegeben werden, wenn er richtig annotiert ist.

public void Method1<T>()
{
    // T is not valid here because it may not a Variant-compatible type.
    var invalidArray = new Godot.Collections.Array<T>();
}

public void Method2<[MustBeVariant] T>()
{
    // T is guaranteed to be a Variant-compatible type because it's annotated
    // with the [MustBeVariant] attribute, so it can be used here.
    var validArray = new Godot.Collections.Array<T>();
}

Wie man Verstöße behebt

Um einen Verstoß gegen diese Regel zu beheben, fügen Sie das Attribut ``[MustBeVariant]'' zu dem generischen Typ hinzu, der als Argument für einen generischen Typ verwendet wird, der mit Variant kompatibel sein muss.

Wann man Warnungen unterdrücken sollte

Unterdrücken Sie nicht eine Warnung zu dieser Regel. API, die generische Typargumente enthält, die mit dem Attribut ``[MustBeVariant]'' annotiert sind, haben in der Regel diese Anforderung, da die Werte an die Engine übergeben werden; wenn der Typ nicht marshalled werden kann, führt dies zu Laufzeitfehlern.