<PackageReference Include="Nito.Collections.Deque" Version="1.0.2" />

Nito.Collections.Deque<T>

A double-ended queue (deque), which provides O(1) indexed access, O(1) removals from the front and back, amortized O(1) insertions to the front and back, and O(N) insertions and removals anywhere else (with the operations getting slower as the index approaches the middle).
/* Error decompiling System.Collections.Generic.IEnumerator`1 Nito.Collections.Deque`1::GetEnumerator() ---> System.InvalidOperationException: Cannot mutate frozen NullBlockStatement at ICSharpCode.Decompiler.CSharp.Syntax.AstNode.AddChild[T](T child, Role`1 role) in offset 36 at ICSharpCode.Decompiler.CSharp.CSharpDecompiler.DecompileBody(MethodDefinition methodDefinition, IMethod method, EntityDeclaration entityDecl, DecompileRun decompileRun, ITypeResolveContext decompilationContext) in offset 637 -- continuing with outer exception (ICSharpCode.Decompiler.DecompilerException) -- at ICSharpCode.Decompiler.CSharp.CSharpDecompiler.DecompileBody(MethodDefinition methodDefinition, IMethod method, EntityDeclaration entityDecl, DecompileRun decompileRun, ITypeResolveContext decompilationContext) in offset 835 at ICSharpCode.Decompiler.CSharp.CSharpDecompiler.DoDecompile(ITypeDefinition typeDef, DecompileRun decompileRun, ITypeResolveContext decompilationContext) in offset 567 at ICSharpCode.Decompiler.CSharp.CSharpDecompiler.DoDecompileTypes(IEnumerable`1 types, DecompileRun decompileRun, ITypeResolveContext decompilationContext, SyntaxTree syntaxTree) in offset 173 at ICSharpCode.Decompiler.CSharp.CSharpDecompiler.DecompileType(FullTypeName fullTypeName) in offset 141 at Relativity.APIReference.TypeDocumentation.b__30_0() in TypeDocumentation.cs:line 270 */