我有一个程序必须使用复合键来管理对象。 这个键,简单来说就是几个字符串。
我有以下代码:
public struct MyKey
{
public string Part1 { get; set;} // always set
public string Part2 { get; set;} // can be null
public MyKey(string part1, string part2) : this()
{
this.Part1 = part1;
this.Part2 = part2;
}
}
这可以用来存储我的值。
现在我希望能够:
- 使用等于运算符(part1 和 part2 相等)
- 在字典中使用键,尤其是使用 Contains 方法
我猜了很多事情(重写等于运算符、重写 GetHashCode 和 Equals 方法、实现 IComparable 等),但我不确定实现我的目标需要哪些必要步骤以及什么会导致开销.
提前谢谢
最佳答案
使用 .NET 4.0 Tuple
, 它有一个正确的 Equals()
和 GetHashCode()
基于组件值。我以前使用过元组,或者如果它们是字符串键,你总是可以用分隔符连接,但如果你真的想保留那个类作为你的键,你确实需要一个适当的 Equals() 和 GetHashCode(),所以在那种情况下有YourType 工具 IEqualityComparer<YourType>
.
附注如果您想手动而不是元组来覆盖 GetHashCode(),这是一个很好的示例...
What is the best algorithm for an overridden System.Object.GetHashCode?
关于c# - "composite"变量类型的正确实现是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5514611/