fix(game): 修复 UiRouterBase 分析器警告

- 修复 UiRouterBase 中缺少参数名的 ArgumentException 调用

- 更新 UI 键比较与层级字典为 Ordinal 语义,消除字符串与比较器相关警告
This commit is contained in:
gewuyou 2026-04-27 07:40:46 +08:00
parent 617e0bffd2
commit 7e13752bb1

View File

@ -260,7 +260,7 @@ public abstract class UiRouterBase : RouterBase<IUiPageBehavior, IUiPageEnterPar
/// <returns>如果栈顶是指定UI则返回true否则返回false</returns> /// <returns>如果栈顶是指定UI则返回true否则返回false</returns>
public new bool IsTop(string uiKey) public new bool IsTop(string uiKey)
{ {
return Stack.Count != 0 && Stack.Peek().Key.Equals(uiKey); return Stack.Count != 0 && string.Equals(Stack.Peek().Key, uiKey, StringComparison.Ordinal);
} }
/// <summary> /// <summary>
@ -270,7 +270,7 @@ public abstract class UiRouterBase : RouterBase<IUiPageBehavior, IUiPageEnterPar
/// <returns>如果栈中包含指定UI则返回true否则返回false</returns> /// <returns>如果栈中包含指定UI则返回true否则返回false</returns>
public new bool Contains(string uiKey) public new bool Contains(string uiKey)
{ {
return Stack.Any(p => p.Key.Equals(uiKey)); return Stack.Any(p => string.Equals(p.Key, uiKey, StringComparison.Ordinal));
} }
/// <summary> /// <summary>
@ -293,7 +293,7 @@ public abstract class UiRouterBase : RouterBase<IUiPageBehavior, IUiPageEnterPar
public UiHandle Show(string uiKey, UiLayer layer, IUiPageEnterParam? param = null) public UiHandle Show(string uiKey, UiLayer layer, IUiPageEnterParam? param = null)
{ {
if (layer == UiLayer.Page) if (layer == UiLayer.Page)
throw new ArgumentException("Use Push() for Page layer"); throw new ArgumentException("Use Push() for Page layer", nameof(layer));
// 创建实例 // 创建实例
var page = _factory.Create(uiKey); var page = _factory.Create(uiKey);
@ -311,7 +311,7 @@ public abstract class UiRouterBase : RouterBase<IUiPageBehavior, IUiPageEnterPar
public UiHandle Show(IUiPageBehavior page, UiLayer layer) public UiHandle Show(IUiPageBehavior page, UiLayer layer)
{ {
if (layer == UiLayer.Page) if (layer == UiLayer.Page)
throw new ArgumentException("Use Push() for Page layer"); throw new ArgumentException("Use Push() for Page layer", nameof(layer));
return ShowInternal(page, layer, null); return ShowInternal(page, layer, null);
} }
@ -414,7 +414,7 @@ public abstract class UiRouterBase : RouterBase<IUiPageBehavior, IUiPageEnterPar
return Array.Empty<UiHandle>(); return Array.Empty<UiHandle>();
return layerDict return layerDict
.Where(kvp => kvp.Value.Key.Equals(uiKey)) .Where(kvp => string.Equals(kvp.Value.Key, uiKey, StringComparison.Ordinal))
.Select(kvp => new UiHandle(uiKey, kvp.Key, layer)) .Select(kvp => new UiHandle(uiKey, kvp.Key, layer))
.ToList(); .ToList();
} }
@ -593,14 +593,18 @@ public abstract class UiRouterBase : RouterBase<IUiPageBehavior, IUiPageEnterPar
var handle = new UiHandle(page.Key, instanceId, layer); var handle = new UiHandle(page.Key, instanceId, layer);
// 初始化层级字典 // 初始化层级字典
if (!_layers.ContainsKey(layer)) if (!_layers.TryGetValue(layer, out var layerDict))
_layers[layer] = new Dictionary<string, IUiPageBehavior>(); {
layerDict = new Dictionary<string, IUiPageBehavior>(StringComparer.Ordinal);
_layers[layer] = layerDict;
}
// 设置句柄 // 设置句柄
page.Handle = handle; page.Handle = handle;
var layerDict = _layers[layer];
// 检查重入性 // 检查重入性
if (!page.IsReentrant && layerDict.Values.Any(p => p.Key == page.Key)) if (!page.IsReentrant &&
layerDict.Values.Any(p => string.Equals(p.Key, page.Key, StringComparison.Ordinal)))
{ {
Log.Warn("UI {0} is not reentrant but already exists in layer {1}", page.Key, layer); Log.Warn("UI {0} is not reentrant but already exists in layer {1}", page.Key, layer);
throw new InvalidOperationException( throw new InvalidOperationException(