EllanJiang/GameFramework · error · GameFrameworkException

Data name is invalid.

Error message

Data name is invalid.

What it means

Fsm.HasData validates the data name before consulting the internal m_Datas dictionary. If the name is null or empty the library cannot identify any stored variable, so it throws GameFrameworkException('Data name is invalid.') immediately instead of performing a lookup. This is an argument-validation guard, not a state error.

Solutions

  1. Ensure the name passed to HasData is a non-null, non-empty string before calling
  2. If the name comes from external input/config, validate or trim it and reject empties early
  3. Check the calling code for variables that were never assigned (default null string)
  4. Wrap the call in try-catch only as a last resort; prefer pre-validation

Example fix

// before
bool has = fsm.HasData(name);
// after
if (!string.IsNullOrEmpty(name))
{
    bool has = fsm.HasData(name);
}
Defensive patterns

Strategy: validation

Validate before calling

if (string.IsNullOrEmpty(name)) throw new ArgumentException("Data name must be non-empty", nameof(name));

Type guard

bool IsValidDataName(string name) => !string.IsNullOrEmpty(name);

Try / catch

try { fsm.HasData(name); } catch (GameFrameworkException ex) when (ex.Message == "Data name is invalid.") { /* handle invalid name */ }

Prevention

When it happens

Trigger: Calling fsm.HasData(null) or fsm.HasData("") or fsm.HasData(variableName) where variableName is an uninitialized or whitespace-trimmed-to-empty string field.

Common situations: Passing a name read from config/JSON that failed to deserialize; forwarding a caller-supplied string without checking; a refactor that renamed a data key and left an empty variable behind.

Understand the failure class

Background: "must not be empty", "cannot be empty" — required-field validation errors across open-source libraries — this error's family across 41 libraries.

Related errors


AI-assisted analysis of EllanJiang/GameFramework@d0c010b051 (2026-09-15). Data as JSON: /api/errors/f6326e73d8a0efb8. Report an issue: GitHub.

Appendix: source

Thrown at GameFramework/Fsm/Fsm.cs:421

            }

            results.Clear();
            foreach (KeyValuePair<Type, FsmState<T>> state in m_States)
            {
                results.Add(state.Value);
            }
        }

        /// <summary>
        /// 是否存在有限状态机数据。
        /// </summary>
        /// <param name="name">有限状态机数据名称。</param>
        /// <returns>有限状态机数据是否存在。</returns>
        public bool HasData(string name)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new GameFrameworkException("Data name is invalid.");
            }

            if (m_Datas == null)
            {
                return false;
            }

            return m_Datas.ContainsKey(name);
        }

        /// <summary>
        /// 获取有限状态机数据。
        /// </summary>
        /// <typeparam name="TData">要获取的有限状态机数据的类型。</typeparam>
        /// <param name="name">有限状态机数据名称。</param>
        /// <returns>要获取的有限状态机数据。</returns>
        public TData GetData<TData>(string name) where TData : Variable
        {

View on GitHub (pinned to d0c010b051)