首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >多个可为空的Guid,并且其中只有一个可以有值

多个可为空的Guid,并且其中只有一个可以有值
EN

Stack Overflow用户
提问于 2021-10-14 02:08:55
回答 1查看 56关注 0票数 0

我有一个FinancialAccount类,可以链接到其他三个类中,也可以手动生成,所以我实现了一个Enum,其中包含它所链接的类的类型,以及另外三个可以为空的Guid,用于保存该链接类的Guid

代码语言:javascript
运行
AI代码解释
复制
public enum AccountClassificaiton
{
    Normal,
    Bank,
    Contract,
    Employee,
}

public Account()
{
    ...
    public Guid Id { get; set; }
    public string Name { get; set; }
    public AccountClassificaiton AccountClassificaiton { get; set; }
    public Guid? ContractId { get; set; }
    public Guid? EmployeeId { get; set; }
    public Guid? BankAccountId { get; set; }
    ...
}

我需要一个更好的方法来解决这个问题,因为我不能将这些Guid移出这个类,并且在这个类和这三个类之间存在一对一的关系,并且这些Guid中只有一个应该有一个值,这取决于这个类的AccountClassification

抱歉我的英语,我不是以英语为母语的

编辑-1

我使用的是领域驱动设计模式,在同一个解决方案上有8个项目,所以我很难在没有法律问题的情况下向您展示真正的问题

编辑-2

这个项目是财务管理系统的一部分,财务管理系统是一个庞大的ERP系统的一部分

EN

回答 1

Stack Overflow用户

发布于 2021-10-14 03:21:55

我会用不同的方式设计它:

代码语言:javascript
运行
AI代码解释
复制
public enum AccountClassificaiton
{
    Normal,
    Bank,
    Contract,
    Employee,
}

public Account()
{
    ...
    public Guid Id { get; set; }
    public string Name { get; set; }
    public AccountClassificaiton AccountClassificaiton { get; set; }
    public List<Account> LinkedAccounts { get; set; }
    ...
}

差不多吧。

或者,如果您需要根据帐户类型快速查找链接帐户,则更好的方法是使用关键字为AccountClassificaiton类型(值为account对象)的字典按类型对链接帐户进行分组:

代码语言:javascript
运行
AI代码解释
复制
public Dictionnary<AccountClassificaiton, Account> LinkedAccounts { get; set; }

当然,如果您有许多链接的帐户,您可以缩进字典以获得更好的搜索效率:

代码语言:javascript
运行
AI代码解释
复制
public Dictionnary<AccountClassificaiton, Dictionnary<Guid, Account>> LinkedAccounts { get; set; }

或者使用一个自定义相等比较器来处理Guid和AccountClassificaiton类型的组合键:https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.iequalitycomparer-1?view=net-5.0

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69568830

复制
相关文章
2023-03-04:定义一个二维数组N*M,比如5*5数组下所示: 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0,
(0,0) (1,0) (2,0) (2,1) (2,2) (2,3) (2,4) (3,4) (4,4)。
福大大架构师每日一题
2023/03/04
1.1K0
2023-03-04:定义一个二维数组N*M,比如5*5数组下所示: 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0,
2023-03-04:定义一个二维数组N*M,比如5*5数组下所示:0, 1, 0, 0, 0,0, 1, 1, 1, 0,0,
[(0,0) (1,0) (2,0) (2,1) (2,2) (2,3) (2,4) (3,4) (4,4)]。
福大大架构师每日一题
2023/06/08
3060
2023-03-04:定义一个二维数组N*M,比如5*5数组下所示:0, 1, 0, 0, 0,0, 1, 1, 1, 0,0,
【Python】循环语句 ⑤ ( range 语句 | for 循环本质遍历序列 | 生成由 0 开始到 n 的序列 | 生成由 m 到 n 的序列 | 生成由 m 到 n 的步长为 k 的序列 )
上述语法中的 数据集 是 序列类型 , 该类型变量 用于存储一系列有序的元素 , 常见的序列类型有 :
韩曙亮
2023/10/11
2490
【Python】循环语句 ⑤ ( range 语句 | for 循环本质遍历序列 | 生成由 0 开始到 n 的序列 | 生成由 m 到 n 的序列 | 生成由 m 到 n 的步长为 k 的序列 )
2023-02-12:给定正数N,表示用户数量,用户编号从0~N-1, 给定正数M,表示实验数量,实验编号从0~M-1, 给定长度为N的二维数组A, A[i]
Bi = { e, f }表示,第i条查询想知道e号、f号实验,一共有多少人(去重统计)。
福大大架构师每日一题
2023/02/12
5610
2023-02-12:给定正数N,表示用户数量,用户编号从0~N-1, 给定正数M,表示实验数量,实验编号从0~M-1, 给定长度为N的二维数组A, A[i]
从M走到N最少步数
假设一个人站在 X 轴的正半轴上,起始点在 M 点(0 <= M <= 100000),他每次可以向左走一步,向右走一步,或者走到所在坐标乘以2的位置,最终来到 N 点(0 <= N <= 100000)。问:所需的最少步数是几步?(如果不能从 M 走到 N 点,则返回 -1)
echobingo
2018/10/10
8170
2021-08-29:N * M的棋盘(N和M是输入参数),每种颜色
2021-08-29:N * M的棋盘(N和M是输入参数),每种颜色的格子数必须相同的,上下左右的格子算相邻,相邻格子染的颜色必须不同,所有格子必须染色,返回至少多少种颜色可以完成任务。
福大大架构师每日一题
2021/08/30
3420
2021-08-29:N * M的棋盘(N和M是输入参数),每种颜色
输入数字n然后输出0到n的全排列
给定一个正整数n, 则输出0到n的所有排列 输入:2 输出:012 021 102 120 201 210 代码: private static Set<String> result = new HashSet<String>(); public static void allSort(int number) { if (number < 0) { return; } String str=""; for (int i = 0;i <= number; i
用户6055494
2019/10/21
1.1K0
2023-06-24:给你一根长度为 n 的绳子, 请把绳子剪成整数长度的 m 段, m、n都是整数,n > 1并且m > 1,
例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。
福大大架构师每日一题
2023/07/08
2080
2023-06-24:给你一根长度为 n 的绳子, 请把绳子剪成整数长度的 m 段, m、n都是整数,n > 1并且m > 1,
Sony RX0M1-M2外接M43接口改装
两者所对应的传感器尺寸不同,同时物理规格也不一样,MFT的卡口直径46.5mm,法兰距38.6mm,EF的直径是54mm,法兰距44.14mm。
云深无际
2023/02/27
1.2K0
Sony RX0M1-M2外接M43接口改装
UVA The ? 1 ? 2 ? ... ? n = k problem
The ? 1 ? 2 ? ... ? n = k problem The problem Given the following formula, one can set operators '+
用户1624346
2018/04/17
5850
2023-02-12:给定正数N,表示用户数量,用户编号从0~N-1,给定正数M,表示实验数量,实验编号从0~M-1,给定长度为
B[i] = { e, f }表示,第i条查询想知道e号、f号实验,一共有多少人(去重统计)。
福大大架构师每日一题
2023/06/08
1830
2023-02-12:给定正数N,表示用户数量,用户编号从0~N-1,给定正数M,表示实验数量,实验编号从0~M-1,给定长度为
Celery ValueError: n
最近因项目需要,在使用任务队列Celery的时候,出现如题错误,最终在github上里找到解决办法,记录一下。
py3study
2020/01/20
7970
一个正整数 n ,求n!的末尾有几个0
import java.util.Scanner; /** * 输入一个正整数 n ,求n!的末尾有几个0 * 例如:10! = 3628800,则返回 2 */ public class Test1 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int coun
小雨的分享社区
2022/10/26
6910
Numpy与矩阵
请注意,本文编写于 980 天前,最后修改于 980 天前,其中某些信息可能已经过时。
曼亚灿
2023/05/17
1.4K0
Numpy与矩阵
数学--组合数学--当C(n,m)中n固定m++的递推模板
ll power(ll a, ll b, ll p) { ll ans = 1 % p; for (; b; b >>= 1) { if (b & 1) ans = ans * a % p; a = a * a % p; } return ans; } long long mm[500000]; void init(ll n, ll k) { mm[1] = 1; for (ll i =2;
风骨散人Chiam
2020/11/03
5020
节省大量时间的 Deep Learning 效率神器
写深度学习网络代码,最大的挑战之一,尤其对新手来说,就是把所有的张量维度正确对齐。如果以前就有 TensorSensor 这个工具,相信我的头发一定比现在更浓密茂盛!
McGL
2020/10/30
1.7K0
节省大量时间的 Deep Learning 效率神器
0 到 n-1 的数组判重
首先我们想到的就是hash,通过hash判断一个数字是否在之前出现过只需要O(1)的时间复杂度,我们知道hashset的底层过就是hashmap的key,即hash的实现。
Tim在路上
2020/08/04
3670
C语言: 定义一个函数int isprime(int n),用来判别一个正整数n是否为素数。在主函数中输入两个正整数m和n(m>=1,n>m),统计并输出m和n之间的素数的个数以及这些素数的和。
定义一个函数int isprime(int n),用来判别一个正整数n是否为素数。在主函数中输入两个正整数m和n(m>=1,n>m),统计并输出m和n之间的素数的个数以及这些素数的和。
川川菜鸟
2021/10/18
2.7K0
构建列表 [[0] * m] * n带来的隐患
这里只修改了L[0][0],但是却L却输出: [[1, 0, 0], [1, 0, 0]]
生信编程日常
2020/05/08
5780
递归实现n^k
#include<stdio.h> #include<stdlib.h> int Power(int m,int n){ if(n<=1){ return m;} return m*Power(m,n-1); } int main(){ int m; int n; printf("请输入需要计算次方的底数与指数:"); scanf("%d %d",&m,&n); a=Power(m,n); printf("结果为:%d\n",a); system("pause")
小雨的分享社区
2022/10/26
2340

相似问题

ValueError: matmul:输入操作数1的核心维数0不匹配,具有gufunc签名(n,k),(k,m?)->(n?,m?)

13

ValueError: matmul:输入操作数1的核心维数0不匹配,具有gufunc签名(n,k),(k,m?)->(n?,m?)(尺码13与1不同)

12

ValueError: matmul:输入操作数1在其核心维度0中不匹配,gufunc签名为(n?,k),(k,m?)->(n?,m?)(大小%1与%3不同)

2957

ValueError: matmul:输入操作数1在其核心维度0中不匹配,gufunc签名为(n?,k),(k,m?)->(n?,m?)(大小%2与%1不同)

120

matmul:输入操作数1的核心维度0不匹配,gufunc签名为(n?,k),(k,m?)->(n?,m?)(大小20与10不同)

117
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档