reckfellENGINE

C#: проверить Variant до преобразования

Nil, Int64, диапазоны и строгий приём целого без неявного преобразования строк.

На этой странице

Когда нужен Variant

Variant — значение на динамической границе движка: Get/Set, Call и нетипизированные коллекции. Внутри своей модели сохраняйте конкретные C#-типы. Variant не превращает произвольный object, List<T> или DateTime в поддерживаемое движком значение.

ЗначениеПредставление
default(Variant)Variant.Type.Nil
int, longVariant.Type.Int; извлечение AsInt64, Obj имеет тип long
float, doubleVariant.Type.Float; Obj имеет тип double
int[]Упакованный массив; AsInt32Array возвращает массив .NET
Resource / EntityСсылка на объект; проверка времени жизни остаётся необходимой

VariantType показывает фактическую категорию. Метод As… — операция преобразования, а не проверка схемы. Если нужен именно целочисленный счётчик, сначала проверьте Int, затем диапазон long, только после этого приводите к int.

Законченный проверяющий метод

Добавьте файл как обычный C#-helper; прикреплять его к Entity не нужно. TryRead принимает 25 и 999L; отклоняет −1L, 1000L, 1L << 40, строку «25», число 25.0 и Nil. Выход при отказе равен 0. Вызывающий код должен проверить bool, прежде чем использовать count.

VariantCounter.cs
C#
using Reckfell;

public static class VariantCounter
{
    public static bool TryRead(Variant value, out int count)
    {
        count = 0;
        if (value.VariantType != Variant.Type.Int) return false;
        long raw = value.AsInt64();
        if (raw < 0 || raw > 999) return false;
        count = (int)raw;
        return true;
    }
}

В общем стенде результат 25 виден в интерфейсе. Это проверка одного поля, не полный валидатор JSON/сохранений: ключи, размер сообщения, обязательные поля и версии схемы задаются отдельно.

Копии и время жизни

Прочитанный через AsInt32Array массив .NET можно менять независимо: это не запись назад в исходный Variant. Движковые Array/Dictionary, напротив, имеют правила общих ссылок — см. коллекции.

Variant является struct с IDisposable и может удерживать нативные данные. Не освобождайте копию произвольно, если другую копию ещё используют: внутреннее владение может быть общим. Для самостоятельно созданного временного Variant ограничивайте время использования; не вызывайте Dispose у заимствованных значений, которыми ещё владеет другой код. Упаковка Entity в Variant не продлевает её жизнь после Free.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.