相关疑难解决方法(0)

重写System.Object.GetHashCode的最佳算法是什么?

在.NET GetHashCode方法中,很多地方都使用.NET 方法.特别是在快速查找集合中的项目或确定相等性时.是否有关于如何GetHashCode为我的自定义类实现覆盖的标准算法/最佳实践,因此我不会降低性能?

.net algorithm hashcode gethashcode

1389
推荐指数
14
解决办法
19万
查看次数

实现此复合GetHashCode()的最佳方法是什么

我有一个简单的课程:

public class TileName {
    int Zoom, X, Y;

    public override bool Equals (object obj)
    {
        var o = obj as TileName;
        return (o != null) && (o.Zoom == Zoom) && (o.X == X) && (o.Y == Y);
    }

    public override int GetHashCode ()
    {
        return (Zoom + X + Y).GetHashCode();
    }
}
Run Code Online (Sandbox Code Playgroud)

我很好奇,如果我做了类似的事情,我会得到更好的哈希码分布:

    public override int GetHashCode ()
    {
        return Zoom.GetHashCode() + X.GetHashCode() + Y.GetHashCode();
    }
Run Code Online (Sandbox Code Playgroud)

这个类将被用作Dictionary键,所以我确实希望确保有一个不错的发行版.

.net c# hash computer-science

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

Enumerable.Sum()溢出

嘿,我正在使用Enumerable.Sum()LINQ 的扩展方法来计算哈希码,并且OverflowExceptions在代码变大时遇到问题.我尝试将电话放在一个unchecked区块中,但这似乎没有帮助.

该方法的MSDN文档说,如果值太大,它将抛出,但我检查了反射器,这就是:

public static int Sum(this IEnumerable<int> source) {
    if (source == null) {
        throw Error.ArgumentNull("source");
    }
    int num = 0;
    foreach (int num2 in source) {
        num += num2;
    }
    return num;
}
Run Code Online (Sandbox Code Playgroud)

根据这个反编译,我希望它可以溢出或不取决于调用代码的上下文.为什么它会溢出,我怎么能让它停止?

.net c# linq decompiling

12
推荐指数
2
解决办法
2307
查看次数

计算通用列表中所有属性的值

我只是想从我正在执行的特定自定义对象列表中添加值,如下所示:

private int CountChances()
{
    int totalChance = 0;
    foreach(var chance in this.Chances)
    {
       totalChance += chance.Value;
    }
    return totalChance;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法在没有foreach循环的情况下更快地完成这项工作?我几乎可以肯定linq应该能够快速完成这项工作,但我似乎无法找到如何做到这一点.

c# linq list

0
推荐指数
2
解决办法
89
查看次数