Types 我如何定义F#中相互依赖的两种类型?
我对F#还很陌生,所以请不要怪我:) 我的服务为我提供了用户、组和其他对象。userobject如下所示: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
{
"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#使用,则建议使用这种定义样式: