From 0f4ee164a3fe38b6541c7f1f58e0b9244f5f1ad0 Mon Sep 17 00:00:00 2001 From: Trivalik <3148279+trivalik@users.noreply.github.com> Date: Wed, 15 Feb 2023 12:16:11 +0100 Subject: [PATCH] reduce duplicate IndexOf calls (#12599) --- .../src/Core/HandlerImpl/Application/Application.Impl.cs | 2 +- src/Controls/src/Core/ListView.cs | 6 ++++-- src/Controls/src/Core/Shell/Shell.cs | 6 +++--- src/Controls/src/Core/VisualElement.cs | 8 +++++--- src/Controls/src/Xaml/TypeArgumentsParser.cs | 5 +++-- src/Controls/src/Xaml/XmlTypeXamlExtensions.cs | 5 +++-- src/Core/src/Handlers/View/ViewHandlerOfT.Windows.cs | 8 ++++---- 7 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/Controls/src/Core/HandlerImpl/Application/Application.Impl.cs b/src/Controls/src/Core/HandlerImpl/Application/Application.Impl.cs index 37311146584c..f7edda731a9d 100644 --- a/src/Controls/src/Core/HandlerImpl/Application/Application.Impl.cs +++ b/src/Controls/src/Core/HandlerImpl/Application/Application.Impl.cs @@ -76,7 +76,7 @@ internal void RemoveWindow(Window window) if (window is Element windowElement) { var oldIndex = InternalChildren.IndexOf(windowElement); - InternalChildren.Remove(windowElement); + InternalChildren.RemoveAt(oldIndex); windowElement.Parent = null; OnChildRemoved(windowElement, oldIndex); } diff --git a/src/Controls/src/Core/ListView.cs b/src/Controls/src/Core/ListView.cs index 5cafdb6de2b8..9f687578af82 100644 --- a/src/Controls/src/Core/ListView.cs +++ b/src/Controls/src/Core/ListView.cs @@ -456,10 +456,12 @@ protected override void UnhookContent(Cell content) { base.UnhookContent(content); - if (content == null || !_logicalChildren.Contains(content)) + if (content == null) return; var index = _logicalChildren.IndexOf(content); - _logicalChildren.Remove(content); + if (index == -1) + return; + _logicalChildren.RemoveAt(index); content.Parent = null; VisualDiagnostics.OnChildRemoved(this, content, index); diff --git a/src/Controls/src/Core/Shell/Shell.cs b/src/Controls/src/Core/Shell/Shell.cs index 61ca8df5312f..6edd9aaf0bca 100644 --- a/src/Controls/src/Core/Shell/Shell.cs +++ b/src/Controls/src/Core/Shell/Shell.cs @@ -713,11 +713,11 @@ public void RemoveLogicalChild(Element element) element.Parent = null; - if (!_logicalChildren.Contains(element)) + var oldLogicalIndex = _logicalChildren.IndexOf(element); + if (oldLogicalIndex == -1) return; - var oldLogicalIndex = _logicalChildren.IndexOf(element); - _logicalChildren.Remove(element); + _logicalChildren.RemoveAt(oldLogicalIndex); OnChildRemoved(element, oldLogicalIndex); VisualDiagnostics.OnChildRemoved(this, element, oldLogicalIndex); } diff --git a/src/Controls/src/Core/VisualElement.cs b/src/Controls/src/Core/VisualElement.cs index 2f74c861cdda..c4f07b2ecee1 100644 --- a/src/Controls/src/Core/VisualElement.cs +++ b/src/Controls/src/Core/VisualElement.cs @@ -178,10 +178,12 @@ static void OnTransformChanged(BindableObject bindable, object oldValue, object var transforms = ((string)newValue).Split(' '); foreach (var transform in transforms) { - if (string.IsNullOrEmpty(transform) || transform.IndexOf("(", StringComparison.Ordinal) < 0 || transform.IndexOf(")", StringComparison.Ordinal) < 0) + var openBracket = transform.IndexOf("(", StringComparison.Ordinal); + var closeBracket = transform.IndexOf(")", StringComparison.Ordinal); + if (string.IsNullOrEmpty(transform) || openBracket < 0 || closeBracket < 0) throw new FormatException("Format for transform is 'none | transform(value) [transform(value) ]*'"); - var transformName = transform.Substring(0, transform.IndexOf("(", StringComparison.Ordinal)); - var value = transform.Substring(transform.IndexOf("(", StringComparison.Ordinal) + 1, transform.IndexOf(")", StringComparison.Ordinal) - transform.IndexOf("(", StringComparison.Ordinal) - 1); + var transformName = transform.Substring(0, openBracket); + var value = transform.Substring(openBracket + 1, closeBracket - openBracket - 1); double translationX, translationY, scaleX, scaleY, rotateX, rotateY, rotate; if (transformName.StartsWith("translateX", StringComparison.OrdinalIgnoreCase) && double.TryParse(value, out translationX)) bindable.SetValue(TranslationXProperty, translationX); diff --git a/src/Controls/src/Xaml/TypeArgumentsParser.cs b/src/Controls/src/Xaml/TypeArgumentsParser.cs index 4fc536ba210b..7e730ca6f33d 100644 --- a/src/Controls/src/Xaml/TypeArgumentsParser.cs +++ b/src/Controls/src/Xaml/TypeArgumentsParser.cs @@ -45,9 +45,10 @@ static XmlType Parse(string match, ref string remaining, IXmlNamespaceResolver r IList typeArguments = null; if (isGeneric) { + var openBracket = type.IndexOf("(", StringComparison.Ordinal); typeArguments = ParseExpression( - type.Substring(type.IndexOf("(", StringComparison.Ordinal) + 1, type.LastIndexOf(")", StringComparison.Ordinal) - type.IndexOf("(", StringComparison.Ordinal) - 1), resolver, lineinfo); - type = type.Substring(0, type.IndexOf("(", StringComparison.Ordinal)); + type.Substring(openBracket + 1, type.LastIndexOf(")", StringComparison.Ordinal) - openBracket - 1), resolver, lineinfo); + type = type.Substring(0, openBracket); } var split = type.Split(':'); diff --git a/src/Controls/src/Xaml/XmlTypeXamlExtensions.cs b/src/Controls/src/Xaml/XmlTypeXamlExtensions.cs index 9c823998fee0..6fb90ee8bd41 100644 --- a/src/Controls/src/Xaml/XmlTypeXamlExtensions.cs +++ b/src/Controls/src/Xaml/XmlTypeXamlExtensions.cs @@ -68,8 +68,9 @@ static class XmlTypeXamlExtensions for (var i = 0; i < lookupNames.Count; i++) { var name = lookupNames[i]; - if (name.IndexOf(":", StringComparison.Ordinal) != -1) - name = name.Substring(name.LastIndexOf(':') + 1); + var lastIndex = name.LastIndexOf(":", StringComparison.Ordinal); + if (lastIndex != -1) + name = name.Substring(lastIndex + 1); if (typeArguments != null) name += "`" + typeArguments.Count; //this will return an open generic Type lookupNames[i] = name; diff --git a/src/Core/src/Handlers/View/ViewHandlerOfT.Windows.cs b/src/Core/src/Handlers/View/ViewHandlerOfT.Windows.cs index 3f871824889e..9594b1e30b1b 100644 --- a/src/Core/src/Handlers/View/ViewHandlerOfT.Windows.cs +++ b/src/Core/src/Handlers/View/ViewHandlerOfT.Windows.cs @@ -20,9 +20,9 @@ protected override void SetupContainer() return; var oldParent = (Panel?)PlatformView.Parent; - var oldIndex = oldParent?.Children.IndexOf(PlatformView); - oldParent?.Children.Remove(PlatformView); + if (oldIndex is int oldIdx && oldIdx >= 0) + oldParent?.Children.RemoveAt(oldIdx); ContainerView ??= new WrapperView(); ((WrapperView)ContainerView).Child = PlatformView; @@ -43,9 +43,9 @@ protected override void RemoveContainer() } var oldParent = (Panel?)ContainerView.Parent; - var oldIndex = oldParent?.Children.IndexOf(ContainerView); - oldParent?.Children.Remove(ContainerView); + if (oldIndex is int oldIdx && oldIdx >= 0) + oldParent?.Children.RemoveAt(oldIdx); CleanupContainerView(ContainerView); ContainerView = null;