DA0006: 値の型で Equals() をオーバーライドしてくださいDA0006: Override Equals() for value types

規則 IDRule Id DA0006DA0006
カテゴリCategory .NET Framework の使用.NET Framework Usage
プロファイル方法Profiiling methods サンプリングSampling
メッセージMessage 値の型で Equals と等値演算子をオーバーライドしてください。Override Equals and equality operator on value types.
メッセージの種類Messge type 警告Warning

原因Cause

パブリック値型の Equals メソッドまたは等値演算子の呼び出しが、プロファイリング データの大きな割合を占めています。Calls to the Equals method or the equality operators of a public value type are a significant proportion of the profiling data. さらに効率的な方法を実装することを検討してください。Consider implementing a more efficient method.

規則の説明Rule Description

値型の場合、Equals を継承した実装が System.Reflection ライブラリを使用して、この種類のすべてのフィールドの内容を比較します。For value types, the inherited implementation of Equals uses the System.Reflection library and compares the contents of all fields in the type. Reflection は計算コストが高いため、場合によってはすべてのフィールドで等値性を比較する必要はありません。Reflection is computationally expensive, and comparing every field for equality might be unnecessary. ユーザーがインスタンスの比較または並べ替えを行うことや、ハッシュ テーブル キーとしてインスタンスを使用することが予想される場合には、値型に Equals を実装する必要があります。If you expect users to compare or sort instances or to use them as hash table keys, your value type should implement Equals. お使いのプログラミング言語が演算子のオーバーロードに対応している場合、等値演算子と非等値演算子も実装してください。If your programming language supports operator overloading, you should also provide an implementation of the equality and inequality operators.

Equals と等値演算子をオーバーライドする方法については、Equals および等値演算子 (==) 実装のガイドラインを参照してください。For more information about how to override Equals and the equality operators, see Guidelines for Implementing Equals and the Equality Operator (==).

警告の調査方法How to Investigate a Warning

Equals と等値演算子の実装例については、コード分析ルールの「CA1815: equals および operator equals を値型でオーバーライドします」を参照してください。For an example of implementing the Equals and equality operators, see the code analysis rule CA1815: Override equals and operator equals on value types