c# - 引导碰撞 C#
问题描述
最近,我们在现金支付流程中实施了 Guid。在短短十天内,我们至少有十几个关于 Guid 碰撞的案例。请告知为什么不同位置的不同终端生成相同的 guid 以及如何避免 guid 冲突。
请在我们生成 Guid 的类下面找到
public class Cash
{
public Cash()
{
Id = Guid.NewGuid();
}
public Guid Id { get; set; }
}
解决方案
不确定这是否是实际问题,但它与我一直在准备的我们公司的技术讲座相吻合。这是你的代码:
public class Cash
{
public Cash()
{
Id = Guid.NewGuid();
}
public Guid Id { get; set; }
}
...这个类有一个基本问题:它没有被封装。简而言之,“Id”属性有一个公共设置器——这意味着任何使用“Cash”类实例的代码都可以操纵其 Id 属性。
所以我的猜测是以下两个之一:
- 正在复制/引用一个实例,副本自然具有与原始相同的 Id 属性。
- 系统中某处的代码正在弄乱 Id 属性并将其重置为其他内容。
即使缺乏封装不是这个特定问题的原因,我强烈建议您将该行更改为:
public Guid Id { get; private set; }
... 或者 ...
private Guid id;
public Id { get { return this.id } }
无论如何,正如几个人发布的那样,几乎不可能生成完整的重复 GUID。因此,我怀疑像我上面发布的内容实际上是导致问题的原因。
推荐阅读
- python - 如何获取文件字段 url 表单 django?
- audio - 使用 FFMPEG 进行快速 WAV 音频解码:加速 avformat_open_input / avformat_find_stream_info
- netsuite - 从 Eclipse 中连接到 NetSuite Sandbox 时出错
- hasura - 如何为所有表应用权限?
- windows - DebugView 不捕获 KdPrint 输出
- python - 为什么过滤器在 views.py 中不起作用?
- javascript - 对象比较复杂性 Javascript
- linux - “bash: unset: `/home/USERNAME/anaconda3/envs/ENVIRONMENT': not a valid identifier” 调用 conda update 或 deactivate
- php - 访问 https://api.paypal.com/v1/payments/payment/ 时得到 Http 响应码 400
- swift - 在任务完成之前返回的完成处理程序