具有多个构造函数的记录类型
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 项目。
如何在 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 项目。