我想让类的每个实例都X具有唯一的 ID。
我正在使用递增的数字执行此操作:
class X {
private int id;
private static int instanceCounter = 0;
public X() {
id = Interlocked.Increment(ref instanceCounter);
}
//...
}
Run Code Online (Sandbox Code Playgroud)
这些对象也用作字典中的键,所以我想我可以id从GetHashCode().
public override int GetHashCode() {
return id;
}
Run Code Online (Sandbox Code Playgroud)
我知道Eric Lippert 的帖子,但它总是谈论从存储在对象中的多个数据计算散列。
就我而言,唯一的“唯一”数据是id.
所以问题是:
用这种方法有什么我没有考虑过的吗?
如果您希望每个对象都不同(因此不等于任何其他对象),那么根本不要覆盖Equals和GetHashCode。默认值是给出一个“可能是唯一的”哈希码,这是您缩小选择范围所需的全部 - 并且Equals将使用参考标识,这正是您想要的。没有必要有一个单独的id领域,只是为了平等。
如果您出于其他原因确实需要该id字段,您当然可以将其返回GetHashCode- 我建议将其设为只读字段,以明确您的意图。
请注意,无论如何,哈希码都不应该用作明确的正相等检查 - 它们仅用于排除绝对不相等的实例。
| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |