مقارنة الطبقات الداخلية المتداخلة داخل فئة عامة

StackOverflow https://stackoverflow.com/questions/2242721

  •  19-09-2019
  •  | 
  •  

سؤال

أقوم بصياغة فئة داخلية متداخلة داخل فئة عامة وأنا غير متأكد إذا أكتب هذا بشكل صحيح. هل هناك أي شيء خاطئ للغاية هنا؟

إليك الرمز:

public class Foo<T> where T : IComparable<T>
{
    protected class Bar : IComparable
    {
        private KeyValuePair<T, string> _keyval;

        public Bar(KeyValuePair<T, string> kv)
        {
            _keyval = kv;
        }

        public int CompareTo(object obj)
        {
            T comparing = (T)obj;
            return _keyval.Key.CompareTo(comparing.key);
        }
    }

    private List<Bar> _bars;

    public Foo()
    {
        _bars = new List<Bar>();
    }

    public void AddKeyValInOrder(KeyValuePair<T, string> kv)
    {
        Bar toAdd = new Bar(kv);

        int positionToAddAt = _bars.BinarySearch(toAdd);
        if (positionToAddAt < 0)
            positionToAddAt = positionToAddAt ^ -1;

        _bars.Insert(positionToAddAt, toAdd);
    }
}
هل كانت مفيدة؟

المحلول

أولا، لاحظ أنه إذا لم تكن بحاجة إلى التكرارات، SortedList<T> قد يكون مفيدا.

ال List<Bar> سوف تريد المقارنة Bar الحالات، لذلك احتياجات المقارنة الخاصة بك للعمل Bar (معظمها تنفذ بسهولة عن طريق التنفيذ IComparable<Bar>:

protected class Bar : IComparable, IComparable<Bar>
{
    private KeyValuePair<T, string> _keyval;

    public Bar(KeyValuePair<T, string> kv)
    {
        _keyval = kv;
    }
    public int CompareTo(Bar other)
    {
        return _keyval.Key.CompareTo(other._keyval.Key);
    }
    int IComparable.CompareTo(object obj)
    {
        return CompareTo(obj as Bar);
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top