具有多个构造函数的记录类型

Record type with multiple constructors

如何在 C# 中为记录类型创建多个构造函数

我创建了这样的记录类型:

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

现在我想介绍另一个没有参数的构造函数重载,我该怎么做? 在正常的 class 中,我会做这样的事情:

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;
    }
}

使用可选参数。

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

您可以像下面这样编写代码:

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;
    }
}

所选答案适用于所有成员都是简单类型的这种简单情况。对于引用类型,您通常希望调用它们的构造函数等。

正确的解决方案是像这样简单地添加您想要的构造函数:

record Rank(int level, string description);

record Manager(string FirstName, Rank rank) {
  // public Manager(string FirstName, Rank rank) auto generated by compiler
  public Manager() : this("", new(0, "Entry")) { }
}
                          

你可以这样写:

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

因此,在构造函数中,您可以传递 Dto 项目。