Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Types 我如何定义F#中相互依赖的两种类型?_Types_F# - Fatal编程技术网

Types 我如何定义F#中相互依赖的两种类型?

Types 我如何定义F#中相互依赖的两种类型?,types,f#,Types,F#,我对F#还很陌生,所以请不要怪我:) 我的服务为我提供了用户、组和其他对象。userobject如下所示: { "id": 0, "firstname": null, "lastame": null, "emailaddress": null, "active": false, "groups": null, "groupcount": 0, "createdgroups": null, "createdgroupscount": 0, "createdf

我对F#还很陌生,所以请不要怪我:)

我的服务为我提供了用户、组和其他对象。userobject如下所示:

{
  "id": 0,
  "firstname": null,
  "lastame": null,
  "emailaddress": null,
  "active": false,
  "groups": null,
  "groupcount": 0,
  "createdgroups": null,
  "createdgroupscount": 0,
  "createdfiles": null,
  "createdfilescount": 0,
  "createdfolders": null,
  "createdfolderscount": 0,
  "createdvideos": null,
  "createdvideoscount": 0,
  "createdcategories": null,
  "createdcategoriescount": 0
}
{
  "id": 0,
  "name": null,
  "description": null,
  "videos": null,
  "videocount": 0,
  "files": null,
  "filecount": 0,
  "members": null,
  "membercount": 0,
  "creator": {
    "id": 0,
    "firstname": null,
    "lastame": null,
    "emailaddress": null,
    "active": false,
    "groups": null,
    "groupcount": 0,
    "createdgroups": null,
    "createdgroupscount": 0,
    "createdfiles": null,
    "createdfilescount": 0,
    "createdfolders": null,
    "createdfolderscount": 0,
    "createdvideos": null,
    "createdvideoscount": 0,
    "createdcategories": null,
    "createdcategoriescount": 0
  }
}
组对象如下所示:

{
  "id": 0,
  "firstname": null,
  "lastame": null,
  "emailaddress": null,
  "active": false,
  "groups": null,
  "groupcount": 0,
  "createdgroups": null,
  "createdgroupscount": 0,
  "createdfiles": null,
  "createdfilescount": 0,
  "createdfolders": null,
  "createdfolderscount": 0,
  "createdvideos": null,
  "createdvideoscount": 0,
  "createdcategories": null,
  "createdcategoriescount": 0
}
{
  "id": 0,
  "name": null,
  "description": null,
  "videos": null,
  "videocount": 0,
  "files": null,
  "filecount": 0,
  "members": null,
  "membercount": 0,
  "creator": {
    "id": 0,
    "firstname": null,
    "lastame": null,
    "emailaddress": null,
    "active": false,
    "groups": null,
    "groupcount": 0,
    "createdgroups": null,
    "createdgroupscount": 0,
    "createdfiles": null,
    "createdfilescount": 0,
    "createdfolders": null,
    "createdfolderscount": 0,
    "createdvideos": null,
    "createdvideoscount": 0,
    "createdcategories": null,
    "createdcategoriescount": 0
  }
}
现在我的问题是,creator属性是用户类型。members属性是一个用户列表

这就是我的F#类型的样子,用户优先:

type User =
    member this.ID = 0
    member this.Firstname = ""
    member this.Lastname = ""
    member this.Emailaddress = ""
    member this.Active = false

    member this.AllGroupsCount = 0
    member this.Groups = List<Group>.Empty

    member this.AllCreatedGroupsCount = 0
    member this.CreatedGroups = List<Group>.Empty

    member this.AllCreatedFoldersCount = 0
    member this.CreatedFolders = List<Folder>.Empty

    member this.AllCreatedFilesCount = 0
    member this.CreatedFiles = List<File>.Empty

    member this.AllCreatedCategoriesCount = 0
    member this.CreatedCategories = List<Category>.Empty

    member this.AllCreatedVideosCount = 0
    member this.CreatedVideos = List<Video>.Empty
输入用户=
成员this.ID=0
成员名称:this.Firstname=“”
成员名称。Lastname=“”
此成员。Emailaddress=“”
成员this.Active=false
成员this.allGroupScont=0
成员this.Groups=List.Empty
成员this.allCreatedGroupScont=0
成员this.CreatedGroups=List.Empty
成员this.AllCreatedFoldersCount=0
成员this.CreatedFolders=List.Empty
成员this.allCreatedFileCount=0
成员this.CreatedFiles=List.Empty
成员this.AllCreatedCategoriesCount=0
成员this.CreatedCategories=List.Empty
成员this.AllCreatedVideosCount=0
成员this.CreatedVideos=List.Empty
这是组对象:

type Group =
    member this.ID = 0
    member this.Name = ""
    member this.Description = ""
    member this.Videos = List<Video>.Empty
    member this.Files = List<File>.Empty
    member this.Members = List<User>.Empty
    member this.Creator = null
类型组=
成员this.ID=0
成员名称=“”
此成员。Description=“”
成员:this.Videos=List.Empty
成员this.Files=List.Empty
member this.Members=List.Empty
成员:this.Creator=null

现在的问题是,当我将组放在用户对象之前时,组表示用户未定义,当我将用户放在组之前时,它表示组未定义,我如何解决此问题?

您可以使用递归组处理此问题:

type User =
    member this.ID = 0
    ...
and Group =
    member this.ID = 0
    ...
请注意,在定义类型的方式中,所有属性都具有给定的常量值。在F#中定义此类数据的自然方式是:

好的,这很有帮助:)但是我如何定义构造函数呢?重点是,我需要稍后在C#中使用该库。如果要从C#使用,则建议使用这种定义样式: