Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

GD0302: Il parametro di tipo generico deve essere annotato con l'attributo '[MustBeVariant]'

ID regola

GD0302

Categoria

Utilizzo

Soluzione è distruttiva o non-distruttiva

Distruttiva

Abilitato per predefinito

Si

Causa

Un tipo generico è specificato per un argomento di tipo generico quando è previsto un tipo compatibile con Variant, ma il tipo generico specificato non è annotato con l'attributo [MustBeVariant].

Descrizione della regola

Quando un parametro di tipo generico è annotato con l'attributo [MustBeVariant], il tipo generico deve essere un tipo compatibile con Variant. Quando il tipo utilizzato è anch'esso un tipo generico, anche questo tipo generico deve essere annotato con l'attributo [MustBeVariant]. Ad esempio, il tipo generico Godot.Collections.Array<T> supporta solo elementi di un tipo che si può convertire in Variant; è possibile specificare un tipo generico se correttamente annotato.

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>();
}

Come risolvere le violazioni

Per correggere una violazione di questa regola, aggiungere l'attributo [MustBeVariant] al tipo generico utilizzato come argomento di tipo generico che deve essere compatibile con Variant.

Quando sopprimere gli avvertimenti

Non sopprimere un avviso da questa regola. Le API che contengono argomenti di tipo generico annotati con l'attributo [MustBeVariant] solitamente hanno questo requisito perché i valori saranno passati al motore; se non è possibile convertire il tipo si causeranno errori in fase di esecuzione.