相关疑难解决方法(0)

c#如何计算对象的哈希码?

这个问题来自关于元组的讨论.

我开始考虑元组应该具有的哈希码.如果我们接受KeyValuePair类作为元组怎么办?它不会覆盖GetHashCode()方法,所以可能它不会知道它的"子"的哈希码...所以,运行时将调用Object.GetHashCode(),它不知道真实的对象结构.

然后我们可以创建一些引用类型的实例,它们实际上是Equal,因为重载的GetHashCode()和Equals().并使用它们作为元组中的"孩子"来"欺骗"字典.

但它不起作用!运行时以某种方式计算出我们元组的结构并调用我们类的重载GetHashCode!

它是如何工作的?Object.GetHashCode()的分析是什么?

当我们使用一些复杂的密钥时,它会在某些不好的情况下影响性能吗?(可能,不可能的情况......但仍然)

以此代码为例:

namespace csharp_tricks
{
    class Program
    {
        class MyClass
        {
            int keyValue;
            int someInfo;

            public MyClass(int key, int info)
            {
                keyValue = key;
                someInfo = info;
            }

            public override bool Equals(object obj)
            {
                MyClass other = obj as MyClass;
                if (other == null) return false;

                return keyValue.Equals(other.keyValue);
            }

            public override int GetHashCode()
            {
                return keyValue.GetHashCode();
            }
        }

        static void Main(string[] args)
        {
            Dictionary<object, object> dict = new Dictionary<object, object>();

            dict.Add(new KeyValuePair<MyClass,object>(new MyClass(1, …
Run Code Online (Sandbox Code Playgroud)

c# hash internals

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

寻找List <KeyValuePair <string,KeyValuePair <string,string >>>的替代品

结束了这个糟糕的数据结构:

List<KeyValuePair<string, KeyValuePair<string, string>>>
Run Code Online (Sandbox Code Playgroud)

它不太可能变得很大(我估计<1K)并且我将一遍又一遍地重复这个列表.

任何人都可以想到内置类型的更好的选择?

c# .net-2.0

5
推荐指数
2
解决办法
7507
查看次数

标签 统计

c# ×2

.net-2.0 ×1

hash ×1

internals ×1