Skip to content

Commit cdcc877

Browse files
committed
Use ImmutableCollectionsMarshal
1 parent cf7a11c commit cdcc877

1 file changed

Lines changed: 7 additions & 2 deletions

File tree

src/MemoryPack.Core/Formatters/ImmutableCollectionFormatters.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.Buffers;
44
using System.Collections.Immutable;
55
using System.Runtime.CompilerServices;
6+
using System.Runtime.InteropServices;
67

78
// Immutable Collections formatters
89

@@ -63,10 +64,14 @@ public override void Deserialize(ref MemoryPackReader reader, scoped ref Immutab
6364
return;
6465
}
6566

67+
#if NET8_0_OR_GREATER
68+
value = ImmutableCollectionsMarshal.AsImmutableArray(array);
69+
#else
6670
// create Empty and replace inner T[] field(avoid defensive copy of Create)
6771
value = ImmutableArray.Create<T?>();
6872
ref var view = ref Unsafe.As<ImmutableArray<T?>, ImmutableArrayView<T?>>(ref value);
6973
view.array = array;
74+
#endif
7075
}
7176
}
7277

@@ -348,7 +353,7 @@ public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter
348353

349354
var keyFormatter = writer.GetFormatter<TKey>();
350355
var valueFormatter = writer.GetFormatter<TValue>();
351-
356+
352357
writer.WriteCollectionHeader(value.Count);
353358
foreach (var item in value)
354359
{
@@ -879,7 +884,7 @@ public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter
879884

880885
var keyFormatter = writer.GetFormatter<TKey>();
881886
var valueFormatter = writer.GetFormatter<TValue>();
882-
887+
883888
writer.WriteCollectionHeader(value.Count);
884889
foreach (var item in value)
885890
{

0 commit comments

Comments
 (0)