{"record":{"id":"a2f893a89a4328bf","repo":"EllanJiang/GameFramework","slug":"linked-list-is-invalid","errorCode":null,"errorMessage":"Linked list is invalid.","messagePattern":"Linked list is invalid\\.","errorType":"exception","errorClass":"GameFrameworkException","httpStatus":null,"severity":"error","filePath":"GameFramework/Base/GameFrameworkLinkedList.cs","lineNumber":399,"sourceCode":"        /// <returns>循环访问集合的枚举数。</returns>\n        IEnumerator IEnumerable.GetEnumerator()\n        {\n            return GetEnumerator();\n        }\n\n        /// <summary>\n        /// 循环访问集合的枚举数。\n        /// </summary>\n        [StructLayout(LayoutKind.Auto)]\n        public struct Enumerator : IEnumerator<T>, IEnumerator\n        {\n            private LinkedList<T>.Enumerator m_Enumerator;\n\n            internal Enumerator(LinkedList<T> linkedList)\n            {\n                if (linkedList == null)\n                {\n                    throw new GameFrameworkException(\"Linked list is invalid.\");\n                }\n\n                m_Enumerator = linkedList.GetEnumerator();\n            }\n\n            /// <summary>\n            /// 获取当前结点。\n            /// </summary>\n            public T Current\n            {\n                get\n                {\n                    return m_Enumerator.Current;\n                }\n            }\n\n            /// <summary>\n            /// 获取当前的枚举数。","sourceCodeStart":381,"sourceCodeEnd":417,"githubUrl":"https://github.com/EllanJiang/GameFramework/blob/d0c010b05167c58e92350449d04864a91ca13fd2/GameFramework/Base/GameFrameworkLinkedList.cs#L381-L417","documentation":"GameFrameworkLinkedList<T> creates a nested Enumerator by calling linkedList.GetEnumerator() on a constructor argument. The library throws this GameFrameworkException when that argument is null, because enumerating requires a valid linked list instance. It is an eager fail-fast guard placed at the start of enumeration.","triggerScenarios":"Constructing GameFrameworkLinkedList<T>.Enumerator with a null LinkedList<T>, i.e. `new GameFrameworkLinkedList<T>.Enumerator(null)`, typically via GetEnumerator() on a wrapper whose internal list was never initialized.","commonSituations":"Calling foreach on a GameFrameworkLinkedList wrapper whose internal LinkedList<T> field was never assigned, or a default-constructed/serialized-without-init wrapper object whose m_LinkedList stayed null (common with Unity serialization of non-serializable fields).","solutions":["Ensure the GameFrameworkLinkedList wrapper is constructed properly so its internal LinkedList<T> is never null before enumerating.","Add a null check on the source object before calling GetEnumerator()/foreach on it.","If the wrapper came from Unity serialization, initialize the list in a constructor or Awake/OnEnable instead of relying on field serialization.","Wrap enumeration in try-catch for GameFrameworkException if list availability cannot be guaranteed."],"exampleFix":"// before\nvar enumerator = new GameFrameworkLinkedList<int>.Enumerator(null);\n// after\nif (linkedList == null) { linkedList = new LinkedList<int>(); }\nvar enumerator = new GameFrameworkLinkedList<int>.Enumerator(linkedList);","handlingStrategy":"type-guard","validationCode":"if (wrapper == null || wrapper.GetInternalLinkedList() == null) { return; }","typeGuard":"static bool CanEnumerate<T>(GameFrameworkLinkedList<T> list) => list != null;","tryCatchPattern":"try { foreach (var item in list) { ... } } catch (GameFrameworkException) { /* treat as empty */ }","preventionTips":["Initialize internal LinkedList<T> in the wrapper constructor","Null-check before foreach","Avoid Unity-serializing non-serializable list wrappers without explicit init"],"tags":["csharp","null-argument","enumerator","collection"],"backgroundTag":"null-argument","analyzedSha":"d0c010b05167c58e92350449d04864a91ca13fd2","analyzedAt":"2026-09-15T13:37:15.352Z","contentChangedAt":"2026-09-15T13:37:15.352Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}