ImmutableBuilder 1.1.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package ImmutableBuilder --version 1.1.0                
NuGet\Install-Package ImmutableBuilder -Version 1.1.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="ImmutableBuilder" Version="1.1.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add ImmutableBuilder --version 1.1.0                
#r "nuget: ImmutableBuilder, 1.1.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install ImmutableBuilder as a Cake Addin
#addin nuget:?package=ImmutableBuilder&version=1.1.0

// Install ImmutableBuilder as a Cake Tool
#tool nuget:?package=ImmutableBuilder&version=1.1.0                

Sample models

public class Account
{
    private Account() { }

    public string AccountNumber { get; private set; }

    public bool IsSavingsAccount { get; private set; }
}

public class CreditCard
{
    private CreditCard() { }

    public string Number { get; private set; }
    
    public CreditCardProcessors Processor { get; private set; }
}

public enum CreditCardProcessors
{
    Visa, MasterCard
}

public class Person
{
    private Person() { }

    public string Name { get; private set; }

    public int Age { get; private set; }

    public IReadOnlyList<CreditCard> CreditCards { get; private set; }

    public IEnumerable<Account> Accounts { get; private set; }
}

Building models

Account account1 = new Builder<Account>()
    .Set(x => x.AccountNumber, "123")
    .Set(x => x.IsSavingsAccount, true)
    .Build();

Account account2 = new Builder<Account>()
    .Set(x => x.AccountNumber, "987")
    .Set(x => x.IsSavingsAccount, false)
    .Build();

CreditCard cc1 = new Builder<CreditCard>()
    .Set(x => x.Number, "1234")
    .Set(x => x.Processor, CreditCardProcessors.Visa)
    .Build();

CreditCard cc2 = new Builder<CreditCard>()
    .Set(x => x.Number, "xzya")
    .Set(x => x.Processor, CreditCardProcessors.MasterCard)
    .Build();

IEnumerable<Account> accounts = new[] { account1, account2 };

IReadOnlyList<CreditCard> ccs = new List<CreditCard> { cc1, cc2 };

Person p = new Builder<Person>()
    .Set(x => x.Age, 29)
    .Set(x => x.Name, "Kovalski")
    .Set(x => x.CreditCards, ccs)
    .Set(x => x.Accounts, accounts)
    .Build();

Building models making sure all properties are set

new Builder<Account>(throwExceptionOnBuildIfNotAllPropsAreSet: true)
.Set(x => x.AccountNumber, "123")
//.Set(x => x.IsSavingsAccount, false)
.Build(); // throws InvalidOpertaionException with list of set properties

Cloning model by value

Person p1 = p = new Builder<Person>()
    .Set(x => x.Age, 29)
    .Set(x => x.Name, "Kovalski")
    .Build();

Builder<Person> newBuilder = Builder<Person>.FromObject(p1);
// you can change here properties of new object with newBuilder.Set method

Person p2 = newBuilder.Build();

Changing properties

// This method is creating new object form existing one and setting
// new property value to new object, existing object is not changed

Person p1 = p = new Builder<Person>()
    .Set(x => x.Age, 29)
    .Set(x => x.Name, "Kovalski")
    .Build();

Person p2 = Builder<Person>.Change(p1, m => m.Age, 11);
Product 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. 
.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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.1.1 691 4/6/2019
1.1.0 554 4/6/2019
1.0.1 923 6/27/2018
1.0.0 795 6/27/2018