DeepCopy 1.0.1

Simple and efficient library for deep copying .NET objects

There is a newer version of this package available.
See the version list below for details.
Install-Package DeepCopy -Version 1.0.1
dotnet add package DeepCopy --version 1.0.1
<PackageReference Include="DeepCopy" Version="1.0.1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add DeepCopy --version 1.0.1
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

Simple & efficient library for deep copying .NET objects

Described in the blog post .NET IL Generation - Writing DeepCopy.

Usage:

// Add a using directive for DeepCopy.
var poco = new Poco();
var original = new[] { poco, poco };

var result = DeepCopier.Copy(original);

// The result is a copy of the original.
Assert.NotSame(original, result);

// Because both elements in the original array point to the same object, 
// both elements in the copied array also point to the same object.
Assert.Same(result[0], result[1]);

Optionally, classes can be marked using the [Immutable] attribute to tell DeepCopy to skip copying them and return them unmodified.
Object can also be wrapped in an immutable struct using Immutable.Create(value).

The majority of this project was adapted from dotnet/orleans.

PR's welcome!

Simple & efficient library for deep copying .NET objects

Described in the blog post .NET IL Generation - Writing DeepCopy.

Usage:

// Add a using directive for DeepCopy.
var poco = new Poco();
var original = new[] { poco, poco };

var result = DeepCopier.Copy(original);

// The result is a copy of the original.
Assert.NotSame(original, result);

// Because both elements in the original array point to the same object, 
// both elements in the copied array also point to the same object.
Assert.Same(result[0], result[1]);

Optionally, classes can be marked using the [Immutable] attribute to tell DeepCopy to skip copying them and return them unmodified.
Object can also be wrapped in an immutable struct using Immutable.Create(value).

The majority of this project was adapted from dotnet/orleans.

PR's welcome!

Release Notes

Performance improvements

Version History

Version Downloads Last updated
1.0.3 5,926 12/5/2017
1.0.2 248 11/8/2017
1.0.1 219 11/5/2017
1.0.0 253 11/4/2017