コードインスペクション:構造体が 'IEquatable' を実装していません(非公開以外のアクセシビリティ)。
このインスペクションは、この構造体のインスタンスを汎用コンテキストで比較するときに、パフォーマンスを向上させ、メモリオーバーヘッドを削減するために、構造体に 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 日