我有一个程序必须使用复合键管理对象。 这个关键,简单就是几个字符串。
我有以下代码:
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;
}
}
这可以存储我的值。
现在我希望能够:
我猜测了很多事情(覆盖等于运算符,重写GetHashCode和Equals方法,实现IComparable等),但我不确定实现目标的必要步骤是什么,以及什么会导致开销
事先提前答案 0 :(得分:6)
使用.NET 4.0 Tuple
,它具有基于组件值的正确的Equals()
和GetHashCode()
。我之前使用过Tuple,或者如果它们是字符串键,你总是可以用分隔符连接,但是如果你真的想把这个类作为你的键,你需要一个合适的Equals()和GetHashCode(),所以在这种情况下YourType实现IEqualityComparer<YourType>
。
P.S。这是一个覆盖GetHashCode()的好例子,如果你想手动而不是元组...
What is the best algorithm for an overridden System.Object.GetHashCode?
答案 1 :(得分:1)
您需要覆盖Equals
和GetHashCode
才能将对象用作字典中的键。这个answer提供了很好的解释。
答案 2 :(得分:0)
首先,由于拳击,我会远离struct
以及它可能导致的各种编码陷阱。
我会覆盖GetHashCode
和Equals
。 GetHashCode
因为它被用在字典和Equals
中,因为它被各种ORM使用,并且可以方便地实现业务逻辑。