using System.Collections.Generic;
public int Age { get; set; }
public string Name { get; set; }
public override string ToString() => $"{Name} has {Age.ToString()} years!";
internal class PersonBuilder
private Person Person { get; init; }
this.Person = new Person();
public static PersonBuilder Create()
return new PersonBuilder();
public PersonBuilder WithName(string name)
public PersonBuilder WithAge(int age)
internal class PersonalBuilder
private Person template = new Person();
private Person working = new Person();
public PersonalBuilder WithName(string name)
working = working with { Name = name };
public PersonalBuilder WithAge(int age)
working = working with { Age = age };
var buildPerson = working with { };
working = template with { };
public static void Main()
var rnd = new Random(123737);
var names = new List<string> {"Andrei", "Vlad", "Adi"};
var personalBuilder = new PersonalBuilder();
var persons = Enumerable.Range(0, 10).Select(x => {
.WithAge(rnd.Next(20, 30) + x)
.WithName(names[rnd.Next(0, 3)])
person2 = personalBuilder
.WithName(names[rnd.Next(0, 3)])
.WithAge(rnd.Next(20, 30) + x)
foreach (var pair in persons)
Console.WriteLine($"{pair.person1} vs {pair.person2}");