静的分析パッケージの一部である次のクラスがあります。
- オブジェクトは
MetricKey
辞書キーとして使用されます。 Decision
、MetricUnit
&Portfolio
はすべて列挙型です。
辞書のキーマッチングを機能させるには、等式演算子(==)をオーバーライドする必要がありました。http://msdn.microsoft.com/en-us/library/ms173147.aspxのガイダンスを使用しました。ガイダンスでは、実行したGetHashCodeメソッドをオーバーロードする必要があると述べていますが、XOR(^)演算で列挙型を整数にキャストすることの意味を理解していません。私が行ったことは有効ですか、それとも列挙型整数値が重複しているために競合するハッシュコードを取得しますか?:
public class MetricKey
{
public MetricKey(Decision decision, MetricUnit metricUnit, Portfolio portfolio)
{
Decision = decision;
Unit = metricUnit;
Portfolio = portfolio;
}
public Decision Decision { get; private set; }
public MetricUnit Unit { get; private set; }
public Portfolio Portfolio { get; private set; }
public static bool operator == (MetricKey a, MetricKey b)
{
if (ReferenceEquals(a, b))
return true;
if (((object) a == null) || ((object) b == null))
return false;
return a.Decision == b.Decision && a.Unit == b.Unit && a.Portfolio == b.Portfolio;
}
public static bool operator != (MetricKey a, MetricKey b)
{
return !(a == b);
}
public override bool Equals(System.Object obj)
{
if (obj == null)
return false;
var metricKey = obj as MetricKey;
if ((System.Object) metricKey == null)
return false;
return Decision == metricKey.Decision && Unit == metricKey.Unit && Portfolio == metricKey.Portfolio;
}
public bool Equals(MetricKey metricKey)
{
if ((object) metricKey == null)
return false;
return Decision == metricKey.Decision && Unit == metricKey.Unit && Portfolio == metricKey.Portfolio;
}
public override int GetHashCode()
{
return (int)Decision ^ (int)Unit ^ (int)Portfolio;
}
}