تعديل السلوك List.Contains
-
21-08-2019 - |
سؤال
ولدي List<MyObj>
مع class MyObj : IComparable
. كتبت CompareTo
أسلوب في فئة MyObj
في واجهة IComparable
، ولكن عندما تستخدم List<MyObj>.Contains(myObjInstance)
فإنها ترجع false
في حين ينبغي ان true
.
ولست متأكدا من أنني فهم كيفية ولست بحاجة إلى المضي قدما للتأكد من يستخدم List
لي طريقة المقارنة مخصصة عند استدعاء الدالة ثم Contains
.
وهنا هو تنفيذ compareTo بلدي:
#region IComparable Members
public int CompareTo(object obj)
{
MyObj myObj = (MyObj)obj;
return String.Compare(this.Symbol, myObj.Symbol, true);
}
#endregion
لاحظ الملكية رمز عبارة عن سلسلة.
لتوضيح لقد وضعت نقطة توقف في هذه الطريقة compareTo وأنها لا حتى الذهاب الى هناك.
وأي شخص حاولت من أي وقت مضى ذلك؟
وشكرا.
المحلول
وأسهل طريقة مطلقة لمعرفة ما إذا كان يتم استدعاء أسلوب CompareTo الخاص بك هو لتعيين نقطة توقف في ذلك، وضرب F5 لتشغيل البرنامج. لكنني أعتقد أن List<T>.Contains
بالبحث عن IEquatable<T>
اجهة لجعل المقارنة.
نصائح أخرى
هل جربت تجاوز أسلوب يساوي؟
وList<T>
، وفقا لالعاكس، يستخدم EqualityComparer<T>
للتحقق من الاحتواء، وتطبيق الافتراضي (ObjectEqualityComparer) يستخدم يساوي بالنسبة لمعظم الأشياء العادية.