Repository navigation
Snapshot AddFrom's items so a collection can add from itself [patch] - #168
Merged
Merged
Conversation
AddFrom enumerated items while adding to collection, so l.AddFrom(l) or l.AddFrom(l.Where(...)) threw "Collection was modified" on the first Add, where List.AddRange(l) doubles the list. The items are now materialised before any are added, matching what ReplaceWith already does. Fixes #167 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018CRjG9vX7hK9TShFL3iJh3
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Fixes #167
Problem
CollectionExtensions.AddFromenumerateditemswhile adding tocollection. Whenitemswas the collection itself, or a lazy query over it, the firstAddinvalidated the enumerator:List<T>.AddRange(l)handles the same call and produces[1, 2, 1, 2].Change
AddFromnow materialisesitemsinto an array before adding any of them. That is the same snapshotReplaceWithalready takes for the same aliasing case (#132). The snapshot is unconditional, because a lazy query over the target can't be detected from its type.Tests
AddFromItselfDoublesTheCollection:l.AddFrom(l)gives[1, 2, 1, 2].AddFromALazyQueryOverItselfAddsTheQueriedItems:l.AddFrom(l.Where(x => x > 0))gives[1, 2, 1, 2].With the fix reverted, both tests fail. With it in place, the full suite passes: 200 tests, 0 failed.
Generated by Claude Code