如何使用F#中字符串类型的auto属性声明类?

biz*_*zon 2 f# c#-to-f#

我很难理解如何在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.

Tom*_*cek 8

正如评论中所提到的,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和类似的东西,这可能是有用的,但否则,使用它可能会导致你很多痛苦和意外错误.