我很难理解如何在F#中定义类,其中我有没有声明值的属性.等同于c#代码的东西:
class Entity
{
public string Name { get; set; }
public List<string> Favorites { get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我只能声明类型定义的类型
type Entity =
member val Name = "" with get, set
Run Code Online (Sandbox Code Playgroud)
当我指定null时,Name的类型将为null.
正如评论中所提到的,nullF#中不建议使用值,因此如果可以的话,最好避免使用它们.null默认情况下,F#类型也不允许,因此如果您使用的是不可变F#list类型,那么最好的选择是将属性初始化为空列表:
type Entity() =
member val Name = "" with get, set
member val Favorities : list<string> = [] with get, set
Run Code Online (Sandbox Code Playgroud)
请注意,我添加了一个类型注释,list<string>因为编译器不能推断出空列表只包含来自代码的字符串,list<obj>否则你最终会得到它们.
C#List类型在F#中缩写为ResizeArray,因为这是.NET类型,可以将此类型的属性初始化为null:
type Entity() =
member val Name = "" with get, set
member val Favorities : ResizeArray<string> = null with get, set
Run Code Online (Sandbox Code Playgroud)
我想如果你使用一些非F#友好的ORM和类似的东西,这可能是有用的,但否则,使用它可能会导致你很多痛苦和意外错误.