ReSharper 2026.1 Help

コードインスペクション:構造体に 'IEquatable' 実装がありません(private アクセシビリティ)

このインスペクションは、この構造体のインスタンスを汎用コンテキストで比較するときに、パフォーマンスを向上させ、メモリオーバーヘッドを削減するために、構造体に IEquatable<T> インターフェースを実装する必要があることを提案しています。 この警告は、構造体が等価メンバーをオーバーライドし、構造体 (またはレコードなどの構造体を含む型) が実際に等価比較に使用される場合にのみ発行されます。

この場合、 IEquatable<T> を実装すると、次のような利点が得られます。

  • メモリ消費の削減: Equals() が、 IEquatable<T> を実装していない構造体で呼び出されると、実行時に値型 struct が参照型 object に変換されます。これはボックス化を伴い、値と必要なメタデータを保持する新しいオブジェクトがヒープ上に作成されます。

    IEquatable<T> を実装した後、構造体をオブジェクトに変換せずに、 Equals(T other) または Equals(object obj) のカスタム実装を使用して構造体のインスタンスが直接比較されます。

  • パフォーマンスの向上: IEquatable<T> を実装すると、等価比較を使用する List<T>Dictionary<TKey , TValue> などのコレクションのパフォーマンスが向上します。 IEquatable<T>.Equals(T other) は値型を直接操作するため、構造体の Equals(object) に比べて高速です。

クイックフィックスとして、ReSharper は 等価メンバー生成ダイアログの呼び出しをサポートし、構造体に IEquatable<T> を実装できるようにします。

2026 年 6 月 12 日