你所做的事情不会起作用,因为在底层会生成一个三个参数的构造函数。记录语法只是一种语法糖,它会被转换成一个带有某些相等性约定的普通类。
你想要做的需要一个无参构造函数。
你有两个选择,使用带有命名参数的构造函数:
var p = new Person( Name: "Tim", Age: 40, Income: 55);
或者扩展你的record
,添加一个无参构造函数:
public record Person
{
public Person(string name, int age, double income)
{
Name = name;
Age = age;
Income = income;
}
public Person() {}
public string Name { get; init; }
public int Age { get; init; }
public double Income { get; init; }
}
你可以使用构造函数中的: this()
来实现这一点并保留参数列表,但我觉得这只会让人感到困惑。
如果你像我一样声明记录,你可以使用:
var p = new Person { Name = "Tim", Age = 40, Income = 55 };
var p = new Person(Name : "Tim", Age : 40, Income : 55 );
- Dmitry Bychenko