C#中的GetHashCode()方法用于获取对象的哈希码(HashCode)。哈希码是一种用于快速识别对象的整数。哈希码的计算方法是将对象中各种不同类型的值转换成32位整数。通常,我们使用哈希表来操作对象。哈希表将哈希码作为索引,通过哈希码查找对象,这样可以非常快速地定位到对象。
以下是使用GetHashCode()方法的一些示例:
示例1:
class Person
{
public string Name { get; set; }
public int Age { get; set; }
// 重新实现GetHashCode()方法
public override int GetHashCode()
{
// 使用一个合适的二进制算法来计算哈希码,可用位运算或异或运算
int hash = 17;
hash = 31 * hash + Name?.GetHashCode() ?? 0; // 字符串为空时,返回0
hash = 31 * hash + Age;
return hash;
}
}
// 测试代码
Person p1 = new Person() { Name = "张三", Age = 18 };
Person p2 = new Person() { Name = "李四", Age = 19 };
HashSet<Person> hashSet = new HashSet<Person>();
hashSet.Add(p1);
hashSet.Add(p2);
Console.WriteLine(hashSet.Contains(p1)); // 输出True
在上述示例中,我们重新实现了GetHashCode()方法。我们可以在其中使用一个合适的算法来计算哈希码。在这个示例中,我们使用了一个常用的算法,即每个属性的贡献乘以一个常数然后加起来。需要注意的是,当字符串为空时,我们需要返回0。
示例2:
class Point2D
{
public int X { get; set; }
public int Y { get; set; }
}
// 测试代码
Point2D p1 = new Point2D() { X = 1, Y = 2 };
Point2D p2 = new Point2D() { X = 1, Y = 2 };
HashSet<Point2D> hashSet = new HashSet<Point2D>();
hashSet.Add(p1);
hashSet.Add(p2);
Console.WriteLine(hashSet.Contains(p1)); // 输出True
在这个示例中,我们实现了一个简单的Point2D类,该类有两个属性X和Y,用于存储2D平面上的点的坐标。我们在测试代码中对该类的两个对象进行了比较:p1和p2。虽然p1和p2是不同的对象,但它们具有相同的属性,因此它们的哈希码是相等的。在将它们加入哈希表中后,我们可以看到p1和p2的哈希码时相等的,因此在哈希表中只会存储一个对象。
总结一下,我们需要在自定义的类中重新实现GetHashCode()方法,以确保哈希码的正确性。正确的哈希码可以极大提高哈希表处理的效率。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# GetHashCode():获取此实例的哈希代码 - Python技术站