如何在 C#-9 中使用“数据成员”
How to use `Data members` in C#-9
我正在尝试 C# 9 的新语法,但未能使用 Data members。
文档说语法是:
public data class Person { string FirstName; string LastName; }
但是,我遇到了以下编译错误:
CS0116: A namespace cannot directly contain members such as fields or methods
IDE1007: The name 'data' does not exist in the current context.
我尝试过其他语法,它们都有效。所以,我确定我使用的是 C#-9
更新:建议 作为可能的答案。
但是,这不是我的答案,我认为接受的 link 答案是错误的。记录类型和数据成员是两个不同的东西。数据成员是一种定义不可变类型的新方法,而记录类型是值对象。
文档建议在数据成员 类 中只需要定义私有字段之类的属性,因此 Person
等于:
public data class Person
{
public string FirstName { get; init; }
public string LastName { get; init; }
}
data
类 现在称为 record
。它们是相同的、不可变的对象,其行为类似于值类型(表现出结构性或换句话说基于值的相等性)。
关于您在 OP 中的代码,
public data class Person { string FirstName; string LastName; }
可以改写为
public record Person(string FirstName, string LastName);
以上语法使用 Primary Constructor 。如果你想跳过主构造函数,你也可以将记录声明为
public record Person
{
public string FirstName { get; init; }
public string LastName { get; init; }
}
在任何一种情况下,Properties、FirstName 和 LastName 只能在初始化期间分配(通过构造函数或对象初始化程序),之后不能分配。
我正在尝试 C# 9 的新语法,但未能使用 Data members。
文档说语法是:
public data class Person { string FirstName; string LastName; }
但是,我遇到了以下编译错误:
CS0116: A namespace cannot directly contain members such as fields or methods
IDE1007: The name 'data' does not exist in the current context.
我尝试过其他语法,它们都有效。所以,我确定我使用的是 C#-9
更新:建议 作为可能的答案。
但是,这不是我的答案,我认为接受的 link 答案是错误的。记录类型和数据成员是两个不同的东西。数据成员是一种定义不可变类型的新方法,而记录类型是值对象。
文档建议在数据成员 类 中只需要定义私有字段之类的属性,因此 Person
等于:
public data class Person
{
public string FirstName { get; init; }
public string LastName { get; init; }
}
data
类 现在称为 record
。它们是相同的、不可变的对象,其行为类似于值类型(表现出结构性或换句话说基于值的相等性)。
关于您在 OP 中的代码,
public data class Person { string FirstName; string LastName; }
可以改写为
public record Person(string FirstName, string LastName);
以上语法使用 Primary Constructor 。如果你想跳过主构造函数,你也可以将记录声明为
public record Person
{
public string FirstName { get; init; }
public string LastName { get; init; }
}
在任何一种情况下,Properties、FirstName 和 LastName 只能在初始化期间分配(通过构造函数或对象初始化程序),之后不能分配。