で、メソッドがコンテンツを比較するのではなく、参照を比較することによって常に 2 つの間の同等性をチェックするのC#
はなぜですか?Equals()
arrays
結果として、Equals()
実装で呼び出すすべてのメソッド (多く) は、配列で期待どおりに機能しません (コンテンツを比較しません) :
例 :
int[] array1 = new[] {1, 2, 3, 4, 5, 6, 7, 8, 9};
int[] array2 = new[] {1, 2, 3, 4, 5, 6, 7, 8, 9};
var u = array1.Equals(array1); //true
var v = array1.Equals(array2); //false
var w = Array.Equals(array1, array2); //false
var x = (new List<int[]>(new int[][] { array1 })).Contains(array2); //false
var y = (new int[][] { array1 }).Any(x => x == array2); //false
var z = (new int[][] { array1, array2 }).Distinct().Count() == 1; //false
配列を処理する一般的な方法 (タイプに関係なく) は次のようになります。
In Object.Equals()
: 比較する両方のタイプが (同じ長さの) 配列である場合、項目を列挙し (常に可能)、項目ごとに を呼び出しますEquals()
。これらの呼び出しのいずれかが返された場合false
、配列は異なります (返されfalse
ます) それ以外の場合は返されtrue
ます。
SequenceEqual()
注: 、memcmp()
および2つの配列を比較する他の方法について知っています。私の質問は、配列を比較する方法ではありません。#
C設計者が完全な配列比較をメソッドに実装することを選択しない理由を知りたいだけですEquals()
。