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