キーがXYZ
オブジェクトで、値がである辞書がありますboolean
。XYZ クラスは Autodesks API からのものであるため、私が作成したクラスではありません。キーが辞書に存在するかどうかを確認しようとしています。
私の問題:辞書にキーが含まれているnew XYZ(1,1,1)
場合、辞書にこのキーが含まれているかどうかを確認するために、myDictionary.ContainsKey(new XYZ(1,1,1)
常にfalseを返します。
なぜこれが起こっているのですか?どうすれば修正できますか? XYZ
クラスにはそのメソッドを実装する必要があると思いますが、Equals
前に述べたように、このクラスを Autodesks API の一部として作成しませんでした。それとも私は何か間違ったことをしていますか?
Dictionary<XYZ, bool> prevPnts = new Dictionary<XYZ, bool>();
prevPnts[new XYZ(1,1,1)] = true;
// Always says the pnt doesnt exist?
if (prevPnts.ContainsKey(new XYZ(1,1,1)))
TaskDialog.Show("Contains");
else TaskDialog.Show("NOT Contains");
Konradsの回答を使用したソリューション
class XYZEqualityComparer : IEqualityComparer<XYZ>
{
public bool Equals(XYZ a, XYZ b)
{
if (Math.Abs(a.DistanceTo(b)) <= 0.05)
return true;
return false;
}
public int GetHashCode(XYZ x)
{
int hash = 17;
hash = hash * 23 + x.X.GetHashCode();
hash = hash * 23 + x.Y.GetHashCode();
hash = hash * 23 + x.Z.GetHashCode();
return hash;
}
}
Dictionary<XYZ, bool> prevPnts = new Dictionary<XYZ, bool>(new XYZEqualityComparer());