相关疑难解决方法(0)

在.NET中,如果null的哈希码始终为零

鉴于像System.Collections.Generic.HashSet<>accept 这样的集合null成为集合成员,可以询问哈希代码null应该是什么.它看起来像框架使用0:

// nullable struct type
int? i = null;
i.GetHashCode();  // gives 0
EqualityComparer<int?>.Default.GetHashCode(i);  // gives 0

// class type
CultureInfo c = null;
EqualityComparer<CultureInfo>.Default.GetHashCode(c);  // gives 0
Run Code Online (Sandbox Code Playgroud)

对于可以为空的枚举,这可能会(有点)出现问题.如果我们定义

enum Season
{
  Spring,
  Summer,
  Autumn,
  Winter,
}
Run Code Online (Sandbox Code Playgroud)

然后Nullable<Season>(也称为Season?)可以只取五个值,但其中两个,即nullSeason.Spring,具有相同的哈希码.

写这样一个"更好"的平等比较器是很诱人的:

class NewNullEnumEqComp<T> : EqualityComparer<T?> where T : struct
{
  public override bool Equals(T? x, T? y)
  {
    return Default.Equals(x, y);
  }
  public override int …
Run Code Online (Sandbox Code Playgroud)

.net c# hash null

85
推荐指数
3
解决办法
9146
查看次数

标签 统计

.net ×1

c# ×1

hash ×1

null ×1