相关疑难解决方法(0)

需要在结构中覆盖什么以确保平等正常运行?

正如标题所说:我是否需要覆盖==运营商?怎么样的.Equals()方法?我缺少什么?

.net c# struct operators equals-operator

71
推荐指数
4
解决办法
4万
查看次数

什么是2D点结构的适当`GetHashCode()`算法(避免冲突)

请考虑以下代码:

struct Vec2 : IEquatable<Vec2>
{
    double X,Y;

    public bool Equals(Vec2 other)
    {
        return X.Equals(other.X) && Y.Equals(other.Y);
    }

    public override bool Equals(object obj)
    {
        if (obj is Vec2)
        {
            return Equals((Vec2)obj);
        }
        return false;
    }

    // this will return the same value when X, Y are swapped
    public override int GetHashCode()
    {
        return X.GetHashCode() ^ Y.GetHashCode();
    }

}
Run Code Online (Sandbox Code Playgroud)

除了比较双精度的平等对话(这只是演示代码)之外,我关注的是当X,Y值被交换时存在哈希冲突.例如:

Vec2 A = new Vec2() { X=1, Y=5 };
Vec2 B = new Vec2() { X=5, Y=1 };

bool test1 = …
Run Code Online (Sandbox Code Playgroud)

c# point hashcode

13
推荐指数
2
解决办法
1万
查看次数

标签 统计

c# ×2

.net ×1

equals-operator ×1

hashcode ×1

operators ×1

point ×1

struct ×1