Pritom.Copy
1.0.3
dotnet add package Pritom.Copy --version 1.0.3
NuGet\Install-Package Pritom.Copy -Version 1.0.3
<PackageReference Include="Pritom.Copy" Version="1.0.3" />
<PackageVersion Include="Pritom.Copy" Version="1.0.3" />
<PackageReference Include="Pritom.Copy" />
paket add Pritom.Copy --version 1.0.3
#r "nuget: Pritom.Copy, 1.0.3"
#addin nuget:?package=Pritom.Copy&version=1.0.3
#tool nuget:?package=Pritom.Copy&version=1.0.3
Copy - Source Generator for DeepCopy and ShallowCopy in C#
π Copy is a Roslyn-based source generator that reduces boilerplate by automatically generating DeepCopy
and ShallowCopy
methods for your models. Just use an attribute or implement a marker interface, and the generator handles the rest!
β¨ Features
- β
Automatically generates
DeepCopy()
and/orShallowCopy()
methods - β Clean, zero-runtime dependency β generation happens at compile-time
- β
Supports both
[Attribute]
andinterface
-based opt-in mechanisms - β Great for DTOs, ViewModels, and data layer objects
π¦ Installation
Add the package to your project using NuGet:
dotnet add package Copy
π οΈ How It Works
MAKE SURE, your models/pocos/dtos are
partial
. Without this, it won't work.
Option 1: Use Attributes
Annotate your model class with [ShallowCopy]
or [DeepCopy]
:
using Copy;
[ShallowCopy]
public partial class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
This generates a ShallowCopy() method:
public Person ShallowCopy()
{
return new Person
{
Name = this.Name,
Age = this.Age
};
}
Option 2: Implement Marker Interfaces
Instead of using attributes, implement one of the marker interfaces:
public partial class Person : IShallowCopy
{
public string Name { get; set; }
public int Age { get; set; }
}
This will have the same result: a ShallowCopy() method will be generated at compile-time.
π€Ώ Deep Copy Support
If your model contains reference-type properties or collections and you want a true deep copy, use [DeepCopy]
or implement IDeepCopy
:
[DeepCopy]
public partial class Order
{
public Customer Customer { get; set; }
public List<Item> Items { get; set; }
}
The generator will recursively clone reference types where possible.
β Generated Code Is:
Partial β Safe to regenerate on build
Readable β Emitted to the intermediate folder for inspection
Non-intrusive β Wonβt modify your original source
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. 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 was computed. 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. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.