{"record":{"id":"1996af6c30baa178","repo":"AvaloniaUI/Avalonia","slug":"invalid-enumerator-state-enumeration-cannot-proce","errorCode":null,"errorMessage":"Invalid enumerator state: enumeration cannot proceed.","messagePattern":"Invalid enumerator state: enumeration cannot proceed\\.","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/Avalonia.Base/Collections/Pooled/ThrowHelper.cs","lineNumber":312,"sourceCode":"            throw new InvalidOperationException(\"Enumeration has ended.\");\n        }\n\n        [DoesNotReturn]\n        internal static void ThrowInvalidOperationException_EnumCurrent(int index)\n        {\n            throw GetInvalidOperationException_EnumCurrent(index);\n        }\n\n        [DoesNotReturn]\n        internal static void ThrowInvalidOperationException_InvalidOperation_EnumFailedVersion()\n        {\n            throw new InvalidOperationException(\"Collection was modified during enumeration.\");\n        }\n\n        [DoesNotReturn]\n        internal static void ThrowInvalidOperationException_InvalidOperation_EnumOpCantHappen()\n        {\n            throw new InvalidOperationException(\"Invalid enumerator state: enumeration cannot proceed.\");\n        }\n\n        [DoesNotReturn]\n        internal static void ThrowInvalidOperationException_InvalidOperation_NoValue()\n        {\n            throw new InvalidOperationException(\"No value provided.\");\n        }\n\n        [DoesNotReturn]\n        internal static void ThrowInvalidOperationException_ConcurrentOperationsNotSupported()\n        {\n            throw new InvalidOperationException(\"Concurrent operations are not supported.\");\n        }\n\n        [DoesNotReturn]\n        internal static void ThrowInvalidOperationException_HandleIsNotInitialized()\n        {\n            throw new InvalidOperationException(\"Handle is not initialized.\");","sourceCodeStart":294,"sourceCodeEnd":330,"githubUrl":"https://github.com/AvaloniaUI/Avalonia/blob/11c542726898ae954a1ef668c65ec79ec92ab17d/src/Avalonia.Base/Collections/Pooled/ThrowHelper.cs#L294-L330","documentation":"Centralized ThrowHelper.ThrowInvalidOperationException_InvalidOperation_EnumOpCantHappen throws InvalidOperationException \"Invalid enumerator state: enumeration cannot proceed.\" It is actively called from PooledList<T>.Enumerator's non-generic IEnumerator.Current getter when `_index == 0` (before any MoveNext) or `_index == _list._size + 1` (after exhaustion). It is PooledList's combined guard that Current is read only within a valid, in-progress enumeration.","triggerScenarios":"Reading `((IEnumerator)list).Current` before calling MoveNext, or after MoveNext has returned false, on a PooledList enumerator. The boxed/non-generic enumerator path is what hits this helper.","commonSituations":"Manual IEnumerator usage that skips MoveNext; LINQ/foreach desugaring edge cases; reusing an exhausted boxed enumerator; interop that drives IEnumerator.Current directly.","solutions":["Always call MoveNext() and gate on its boolean return before reading Current.","Use foreach (or the public Enumerator) which never reads Current out of band.","Discard and recreate the enumerator rather than reading Current after exhaustion."],"exampleFix":"// before\nvar e = ((IEnumerable)list).GetEnumerator();\nvar v = e.Current; // index 0 -> throws\n\n// after\nvar e = ((IEnumerable)list).GetEnumerator();\nif (e.MoveNext())\n    var v = e.Current;","handlingStrategy":"validation","validationCode":"var e = list.GetEnumerator();\nwhile (e.MoveNext())\n    Use(e.Current); // only valid while MoveNext returned true","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always gate Current on MoveNext's return value.","Prefer the public typed Enumerator / foreach over the boxed IEnumerator path.","Discard exhausted enumerators rather than reading Current again."],"tags":["csharp","pooled","list","enumeration","invalid-operation"],"backgroundTag":null,"analyzedSha":"11c542726898ae954a1ef668c65ec79ec92ab17d","analyzedAt":"2026-08-13T11:57:40.261Z","schemaVersion":2},"datasetVersion":"2026-08-13T14:17:21.547Z"}