Skip to content

Split ObservableListEx.cs into per-family partial classes#1096

Open
dwcullop wants to merge 3 commits into
reactivemarbles:mainfrom
dwcullop:maint/list_ext_breakup
Open

Split ObservableListEx.cs into per-family partial classes#1096
dwcullop wants to merge 3 commits into
reactivemarbles:mainfrom
dwcullop:maint/list_ext_breakup

Conversation

@dwcullop
Copy link
Copy Markdown
Member

@dwcullop dwcullop commented May 26, 2026

Splits ObservableListEx.cs (2,929 lines, 63 distinct operator names spanning 128 method bodies) into 17 partial-class files grouped by operator family.

This is a pure file reorganisation. The only code change is converting public static class ObservableListEx to public static partial class ObservableListEx. No method bodies, XML documentation, comments, preprocessor directives, or other content were added, removed, or altered. The byte content of every method body is preserved. Members within each file are alphabetised; overloads of the same name preserve their original declaration order. All UTF-8 BOM with CRLF line endings.

New files

Numbers in parentheses indicate the count of overloads.

File Members
ObservableListEx.Adapt.cs Adapt
ObservableListEx.AutoRefresh.cs AutoRefresh (2), AutoRefreshOnObservable
ObservableListEx.Bind.cs Bind (5)
ObservableListEx.ChangeStream.cs BufferIf (4), BufferInitial, DeferUntilLoaded (2), NotEmpty, SkipInitial, StartWithEmpty
ObservableListEx.Combinators.cs And (5), Except (5), Or (5), Xor (5), Combine (5, private helper)
ObservableListEx.Conversions.cs AddKey, AsObservableList (2), Cast (2), CastToObject, Clone, Convert, FlattenBufferResult, ForEachChange, ForEachItemChange, RefCount, RemoveIndex
ObservableListEx.Expiration.cs ExpireAfter, LimitSizeTo, Top
ObservableListEx.Filter.cs DistinctValues, Filter (3), FilterOnObservable, FilterOnProperty, SuppressRefresh, WhereReasonsAre, WhereReasonsAreNot
ObservableListEx.Group.cs GroupOn, GroupOnProperty, GroupOnPropertyWithImmutableState, GroupWithImmutableState
ObservableListEx.Lifecycle.cs DisposeMany, PopulateInto, SubscribeMany
ObservableListEx.Merge.cs MergeChangeSets (10), MergeMany, MergeManyChangeSets (3), Switch (2)
ObservableListEx.Notifications.cs OnItemAdded, OnItemRefreshed, OnItemRemoved
ObservableListEx.PropertyChanged.cs WhenAnyPropertyChanged, WhenPropertyChanged, WhenValueChanged
ObservableListEx.Query.cs QueryWhenChanged (2), ToCollection, ToObservableChangeSet (8), ToSortedCollection (2)
ObservableListEx.Sort.cs Reverse, Sort (2)
ObservableListEx.Transform.cs Transform (4), TransformAsync (4), TransformMany (4)
ObservableListEx.Virtualise.cs Page, Virtualise

Deleted

src/DynamicData/List/ObservableListEx.cs

Verification

The split was generated programmatically with byte-level per-method equality checks against the original. Every public method and the 5 private static Combine overloads used internally by the combinator operators were confirmed to be present in exactly one file. The full test suite passes.

dwcullop added 3 commits May 25, 2026 23:06
Splits the 2900-line ObservableListEx.cs into 17 smaller partial-class files grouped by operator family. Each method (and all of its overloads) lives in exactly one file. The class declaration is changed to partial; no code, comments, or XML documentation is added, removed, or otherwise modified. All 2218 tests pass.
Renames ObservableListEx.Pagination.cs to ObservableListEx.Virtualise.cs for closer parity with the cache equivalent (ObservableCacheEx.VirtualiseAndPage.cs). Sorts members alphabetically within each new partial file; overloads of the same name preserve their original declaration order.
@dwcullop dwcullop enabled auto-merge (squash) May 26, 2026 14:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant