private protected void WriteBinaryContext(OutputStream ostr) { Debug.Assert(Protocol == Protocol.Ice2); Debug.Assert(ostr.Encoding == Encoding.V20); int sizeLength = OutputStream.GetSizeLength20(InitialBinaryContext.Count + (_binaryContextOverride?.Count ?? 0)); int size = 0; OutputStream.Position start = ostr.StartFixedLengthSize(sizeLength); // First write the overrides, then the InitialBinaryContext entries that were not overridden. if (_binaryContextOverride is Dictionary <int, Action <OutputStream> > binaryContextOverride) { foreach ((int key, Action <OutputStream> action) in binaryContextOverride) { ostr.WriteVarInt(key); OutputStream.Position startValue = ostr.StartFixedLengthSize(2); action(ostr); ostr.EndFixedLengthSize(startValue, 2); size++; } } foreach ((int key, ReadOnlyMemory <byte> value) in InitialBinaryContext) { if (_binaryContextOverride == null || !_binaryContextOverride.ContainsKey(key)) { ostr.WriteVarInt(key); ostr.WriteSize(value.Length); ostr.WriteByteSpan(value.Span); size++; } } ostr.RewriteFixedLengthSize20(size, start, sizeLength); }