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

Nad*_*dar 43 .net c# c#-9.0

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

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

public record Person(int Id, string FirstName, string LastName)
Run Code Online (Sandbox Code Playgroud)

现在我想引入另一个不带参数的构造函数重载,我该怎么做?在正常的课堂上我会做这样的事情:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

kof*_*fus 53

只需添加您想要的构造函数,如下所示:

record Rank(int level, string description);

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

  // public Manager(string FirstName, Rank Rank) is auto generated
}
                          
Run Code Online (Sandbox Code Playgroud)


小智 16

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

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;
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 8

使用可选参数。

public record Person(int Id = default, string FirstName = null, string LastName = null);
Run Code Online (Sandbox Code Playgroud)

  • 它并没有真正解决创建过载的问题。如果我需要 3 个构造函数会怎样? (2认同)

小智 7

你可以这样写:

public record Person(int Id,string FirstName,string LastName){
   public Person(YourDto item):this(item.Id,item.FirstName,item.LastName){} 
}
Run Code Online (Sandbox Code Playgroud)

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