feat(GFramework.Godot): 添加 Node 扩展方法 OfType 用于类型转换

新增 OfType 扩展方法,支持将 Node 安全转换为目标类型 T。
该方法会在节点无效或类型不匹配时抛出 InvalidCastException 异常。
同时优化了 SafeCallDeferred 方法的节点有效性检查逻辑。
This commit is contained in:
GwWuYou 2025-12-22 22:31:06 +08:00
parent 49383660a7
commit be71076efc

View File

@ -237,7 +237,25 @@ public static class NodeExtensions
public static void SafeCallDeferred(this Node? node, string method)
{
// 检查节点是否为空且实例是否有效,有效时才执行延迟调用
if (node != null && GodotObject.IsInstanceValid(node))
node.CallDeferred(method);
if (node.IsValidNode())
node!.CallDeferred(method);
}
/// <summary>
/// 将指定节点转换为目标类型T
/// </summary>
/// <typeparam name="T">目标节点类型必须继承自Node</typeparam>
/// <param name="node">要转换的节点对象可以为null</param>
/// <returns>转换后的目标类型节点</returns>
/// <exception cref="InvalidCastException">当节点无效或类型不匹配时抛出</exception>
public static T OfType<T>(this Node? node) where T : Node
{
// 检查节点是否有效且类型匹配
if (node.IsValidNode()&& node is T t)
return t;
throw new InvalidCastException($"Cannot cast {node} to {typeof(T)}");
}
}