GD0302: Параметр универсального типа должен быть аннотирован атрибутом '[MustBeVariant]'

Идентификатор правила

GD0302

Категория

Использование

Исправление может быть как ломающим, так и не ломающим

Breaking (Прерывание)

Включено по умолчанию

Да

Причина

Универсальный тип указывается для аргумента универсального типа, когда ожидается Variant-compatible type, но указанный универсальный тип не аннотирован атрибутом [MustBeVariant].

Описание правила

Если параметр универсального типа аннотирован атрибутом [MustBeVariant], универсальный тип должен быть совместимым с Variant. Если используемый тип также является универсальным, этот универсальный тип также должен быть аннотирован атрибутом [MustBeVariant]. Например, универсальный тип Godot.Collections.Array<T> поддерживает только элементы типа, который можно преобразовать в Variant, поэтому универсальный тип может быть указан при условии его корректной аннотации.

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

Как устранить нарушения

Чтобы исправить нарушение этого правила, добавьте атрибут [MustBeVariant] к универсальному типу, который используется в качестве аргумента универсального типа, который должен быть совместим с Variant.

Когда следует подавлять предупреждения

Не подавляйте предупреждение из этого правила. API, содержащие аргументы универсального типа, аннотированные атрибутом [MustBeVariant], обычно предъявляет это требование, поскольку значения будут переданы движку. Если тип не может быть преобразован, это приведет к ошибкам во время выполнения.