سؤال

ولدي 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>.Contains، فإنه يستخدم إما التطبيق الخاص بك واجهة IEquatable أو object.Equals، التي يمكن أن تتجاوز أيضا.

هل جربت تجاوز أسلوب يساوي؟

وList<T>، وفقا لالعاكس، يستخدم EqualityComparer<T> للتحقق من الاحتواء، وتطبيق الافتراضي (ObjectEqualityComparer) يستخدم يساوي بالنسبة لمعظم الأشياء العادية.

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