private int AddInternal(object item) { if (item is null) { throw new ArgumentNullException(nameof(item)); } int index = -1; if (!_owner._sorted) { InnerList.Add(new Entry(item)); } else { Entry entry = item is Entry entryItem ? entryItem : new Entry(item); index = InnerList.BinarySearch(index: 0, Count, entry, this); if (index < 0) { index = ~index; // getting the index of the first element that is larger than the search value } Debug.Assert(index >= 0 && index <= Count, "Wrong index for insert"); InnerList.Insert(index, entry); } bool successful = false; try { if (_owner._sorted) { if (_owner.IsHandleCreated) { _owner.NativeInsert(index, item); } } else { index = Count - 1; if (_owner.IsHandleCreated) { _owner.NativeAdd(item); } } successful = true; } finally { if (!successful) { _ownerComboBoxAccessibleObject.ItemAccessibleObjects.Remove(InnerList[index]); Remove(item); } } return(index); }
private int AddInternal(object item) { if (item is null) { throw new ArgumentNullException(nameof(item)); } int index = -1; if (!_owner._sorted) { InnerList.Add(item); } else { index = InnerList.BinarySearch(item, Comparer); if (index < 0) { index = ~index; // getting the index of the first element that is larger than the search value } Debug.Assert(index >= 0 && index <= InnerList.Count, "Wrong index for insert"); InnerList.Insert(index, item); } bool successful = false; try { if (_owner._sorted) { if (_owner.IsHandleCreated) { _owner.NativeInsert(index, item); } } else { index = InnerList.Count - 1; if (_owner.IsHandleCreated) { _owner.NativeAdd(item); } } successful = true; } finally { if (!successful) { InnerList.Remove(item); } } return(index); }