سؤال

لدي فصل يسمى

MyClass

هذا الفئة يرث Isequatable وينفذ يساوي الطريقة التي أحتاجها إليها. (معنى: عندما أقارن اثنين من كائنات tyupe myclass بشكل فردي في التعليمات البرمجية، فإنه يعمل)

ثم أخلق قائمتين:

var ListA = new List<MyClass>();
var ListB = new List<MyClass>();
// Add distinct objects that are equal to one another to 
// ListA and ListB in such a way that they are not added in the same order.

عندما أذهب إلى مقارنة Lista و ListB، هل يجب أن أحصل على حقيقي؟

ListA.Equals(ListB)==true; //???
هل كانت مفيدة؟

المحلول

حاول القيام بما يلي

ListA.SequenceEquals(ListB);

التسلسل المساواة هي طريقة تمديد المتاحة على Enumerable صف دراسي. يتوفر هذا بشكل افتراضي في مشاريع C # 3.5 لأنه يأتي مع System.linq

نصائح أخرى

للإجابة على سؤالك، لا، يجب أن لا تتحقق. List و List<T> لا تحدد. المساواة، لذلك يرثون الكائنات. المساواة، والذي يتحقق مما يلي:

public static bool Equals(object objA, object objB)
{
    return ((objA == objB) || (((objA != null) && (objB != null)) && objA.Equals(objB)));
}

و objA.Equals(objB) هو الظاهري. إذا كنت أتذكر بشكل صحيح، فإن التنفيذ الافتراضي يتحقق فقط من أجل المساواة المرجعية (مشيرا إلى نفس الكائن في الذاكرة)، لذلك سيعود الكود الخاص بك خطأ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top