dotnet add package Baksteen.Extensions.DeepCopy --version 1.0.2
NuGet\Install-Package Baksteen.Extensions.DeepCopy -Version 1.0.2
<PackageReference Include="Baksteen.Extensions.DeepCopy" Version="1.0.2" />
paket add Baksteen.Extensions.DeepCopy --version 1.0.2
#r "nuget: Baksteen.Extensions.DeepCopy, 1.0.2"
// Install Baksteen.Extensions.DeepCopy as a Cake Addin #addin nuget:?package=Baksteen.Extensions.DeepCopy&version=1.0.2 // Install Baksteen.Extensions.DeepCopy as a Cake Tool #tool nuget:?package=Baksteen.Extensions.DeepCopy&version=1.0.2
C# extension method for fast object cloning.
This is a speed-optimized fork of Alexey Burtsev's deep copier. Depending on your usecase, this will be 2x - 3x faster than the original. It also fixes some bugs which are present in the original code. Compared to the classic binary serialization/deserialization deep clone technique, this version is about seven times faster (the more arrays your objects contain, the bigger the speedup factor).
The speedup is achieved via the following techniques:
- object reflection results are cached
- don't deep copy primitives or immutable structs & classes (e.g. enum and string)
- to improve locality of reference, process the 'fast' dimensions or multidimensional arrays in the inner loops
- use a compiled lamba expression to call MemberwiseClone
How to use:
Use NuGet package manager to add the package Baksteen.Extensions.DeepCopy to your project. Then:
using Baksteen.Extensions.DeepCopy; ... var myobject = new SomeClass(); ... var myclone = myobject.DeepCopy()!; // creates a new deep copy of the original object
Note: the exclamation mark (null-forgiving operator) is only required if you enabled nullable reference types in your project
- Alexey Burtsev (original deep copy code)
- Wouter Groeneveld (unit tests & XElement copy)
- Gitkarst (treat enum as immutable)
- Jean-Paul Mikkers (speed optimization)
|Product||Versions Compatible and additional computed target framework versions.|
|.NET||net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed.|
- No dependencies.
- No dependencies.
This package is not used by any NuGet packages.
This package is not used by any popular GitHub repositories.
Speed up cloning of objects containing nullable primitives, added support for dotnet 7.