From 307b751f680f79b2951b428fae4327fab87867bb Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Fri, 31 Jan 2020 10:17:56 +0100 Subject: [PATCH] Lazily create the selected/deselected lists. --- .../SelectionModelChangeSet.cs | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/src/Avalonia.Controls/SelectionModelChangeSet.cs b/src/Avalonia.Controls/SelectionModelChangeSet.cs index b195117ae6..e927afb9b9 100644 --- a/src/Avalonia.Controls/SelectionModelChangeSet.cs +++ b/src/Avalonia.Controls/SelectionModelChangeSet.cs @@ -21,15 +21,13 @@ namespace Avalonia.Controls CreateItems(x => x.SelectedRanges)); } - private IReadOnlyList CreateIndices(Func?> selector) + private IEnumerable CreateIndices(Func?> selector) { if (_changes == null) { - return Array.Empty(); + yield break; } - var result = new List(); - foreach (var i in _changes) { var ranges = selector(i); @@ -40,20 +38,18 @@ namespace Avalonia.Controls { for (var k = j.Begin; k <= j.End; ++k) { - result.Add(i.Path.CloneWithChildIndex(k)); + yield return i.Path.CloneWithChildIndex(k); } } } } - - return result; } - private IReadOnlyList CreateItems(Func?> selector) + private IEnumerable CreateItems(Func?> selector) { if (_changes == null) { - return Array.Empty(); + yield break; } var result = new List(); @@ -68,13 +64,11 @@ namespace Avalonia.Controls { for (var k = j.Begin; k <= j.End; ++k) { - result.Add(i.Items.GetAt(k)); + yield return i.Items.GetAt(k); } } } } - - return result; } } }