Record type with multiple constructors

Viewed 7950

How do I create multiple constructors for a record type in C#?

I created a record type like this:

public record Person(int Id, string FirstName, string LastName)

Now I want to introduce another constructor overload with no parameters, how can I do that? In a normal class I would do something like this:

public class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public Person()
    {
        
    }

    public Person(int id, string firstName, string lastName)
    {
        Id = id;
        FirstName = firstName;
        LastName = lastName;
    }
}
5 Answers

The selected answer works for this simple case where all the members are simple types. With reference types you usually want to call their constructors etc.

The right solution is to simply add the constructor you want like this:

record Rank(int level, string description);

record Manager(string FirstName, Rank rank) {
  public Manager() : this("", new(0, "Entry")) { }

  // public Manager(string FirstName, Rank rank) auto generated by compiler
}
                          

Use optional arguments.

public record Person(int Id = default, string FirstName = null, string LastName = null);

You can write your code like below:

public record Person
{
    public int Id { get; init; }
    public string FirstName { get; init; }
    public string LastName { get; init; }
    //constructor
    public Person()
    {
        //init or do something
    }
    //overload constructor
    public Person(int id, string firstName, string lastName)
    {
        Id = id;
        FirstName = firstName;
        LastName = lastName;
    }
}

you can write it like this:

public record Person(int Id,string FirstName,string LastName){
   public Person(YourDto item):this(item.Id,item.FirstName,item.LastName){} 
}

so, in the constructor you can pass your Dto item.

You can also extend like so when you have a base record:

public record Person
{
    public Person(Guid? id = null) { }
}

public record Teacher : Person
{
    public Teacher(Guid id) : base(id) { }
    public Teacher(string firstName, string lastName) : base() { }
}
Related