diff --git a/GFramework.Game/UI/UiRouterBase.cs b/GFramework.Game/UI/UiRouterBase.cs index 1da37e6c..8b07e328 100644 --- a/GFramework.Game/UI/UiRouterBase.cs +++ b/GFramework.Game/UI/UiRouterBase.cs @@ -260,7 +260,7 @@ public abstract class UiRouterBase : RouterBase如果栈顶是指定UI则返回true,否则返回false 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); } /// @@ -270,7 +270,7 @@ public abstract class UiRouterBase : RouterBase如果栈中包含指定UI则返回true,否则返回false 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)); } /// @@ -293,7 +293,7 @@ public abstract class UiRouterBase : RouterBase(); 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)) .ToList(); } @@ -593,14 +593,18 @@ public abstract class UiRouterBase : RouterBase(); + if (!_layers.TryGetValue(layer, out var layerDict)) + { + layerDict = new Dictionary(StringComparer.Ordinal); + _layers[layer] = layerDict; + } + // 设置句柄 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); throw new InvalidOperationException(