はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【C#】netstandard2.1・.NET Core3.0以前でSystem.HashCodeを利用するにはMicrosoft.Bcl.HashCodeへの参照が必要

はじめに

GetHashCodeを自前で実装するのにSystem.HashCodeはとても便利です。
learn.microsoft.com

public class Sample : IEquatable<Sample>
{
    public int Id { get; }
    public int Value { get; }

    public bool Equals(Sample other)
    {
        if (other is null) return false;
        if (ReferenceEquals(this, other)) return true;
        return Id == other.Id && Value == other.Value;
    }
    
    public override bool Equals(object obj) => Equals(obj as Sample);
    
    public override int GetHashCode() => HashCode.Combine(Id, Value);
}

ただし利用しているランタイムのバージョンによってはNuGetからパッケージを追加でパッケージをインストールする必要があるので、そのことについて書こうと思います。

対処法

.netstandard2.1・.NET Core3.0以降ならデフォルトで組み込まれているのですが、それ以前であればMicrosoft.Bcl.HashCodeをインストールする必要があります。
www.nuget.org

$ dotnet add package Microsoft.Bcl.HashCode --version 6.0.0

正直今だとほぼお目にかかることがないと思うのですが、SourceGeneratorを活用するプロジェクトだとnetstandard2.0を用いるケースもあるためたまに必要になる知識だったりします。