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], обычно предъявляет это требование, поскольку значения будут переданы движку. Если тип не может быть преобразован, это приведет к ошибкам во время выполнения.