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
- Ensure the name passed to HasData is a non-null, non-empty string before calling
- If the name comes from external input/config, validate or trim it and reject empties early
- Check the calling code for variables that were never assigned (default null string)
- 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
- Always validate names from external sources (config, network, user input) before FSM data APIs
- Initialize string key constants with real values, never string.Empty
- Trim and reject whitespace-only names at your boundary layer
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
- Entity group name is invalid.
- Old name is invalid.
- New name is invalid.
- Setting name is invalid.
- UI group name is invalid.
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)