С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
27 / 27 / 9
Регистрация: 21.04.2015
Сообщений: 704

Необработанное исключение в BinarySearch

11.04.2016, 22:48. Показов 610. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Необработанное исключение типа "System.InvalidOperationException" в mscorlib.dll . На сколько я понимаю неправильный тип входящих данных в методе BinarySearch. Как это исправить?

C#
1
2
3
BindingList<D1> bl1 = new BindingList<D1>(); int Res = -2; Int16? FindVal = 0;
//поле D1.x0 имеет тип <Int16?>
if (bl1.Count > 0) Res = bl1.OrderBy(x => x.x0).ToList().BinarySearch(new D1 { x0 = FindVal });
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.04.2016, 22:48
Ответы с готовыми решениями:

Необработанное исключение
Проблема с созданием приложения под Inventor.Не могу разобраться уже дня 3.Форумчане выручайте срочно. Прилагаю саму программу.

Необработанное исключение
Проблема с созданием приложения под Inventor.Не могу разобраться уже дня 3.Форумчане выручайте срочно.

Необработанное исключение OutOfRange
Приветствую, при компиляции программы выдает такую ошибку. Как исправить?

12
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10425 / 5155 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
11.04.2016, 23:14
Ваю,
Во-первых, для работы BinarySearch, нужно что бы ваш класс D1 реализовывал интерфейс IComparable.
Во-вторых, результат поиска, который вы кладете в переменную Res не имеет смысла, потому что он будет показывать позицию в списке, ссылки на который у вас нет (это тот список, который вы создаете в ToList()).
В-третьих вся эта операция в целом не оптимальна, потому что сортировка OrderBy занимает минимум O(n log n), плюс бинарный поиск занимает O(log n). Получается в целом поиск вашего элемента будет происходить за O(n log n). Но ведь простой поиск перебором, без всяких сортировок занимает всего лишь O(n), то есть будет быстрее.
1
27 / 27 / 9
Регистрация: 21.04.2015
Сообщений: 704
12.04.2016, 00:59  [ТС]
Цитата Сообщение от Storm23 Посмотреть сообщение
ваш класс D1 реализовывал интерфейс IComparable.
спасибо
Цитата Сообщение от Storm23 Посмотреть сообщение
не имеет смысла, потому что он будет показывать позицию в списке, ссылки на который у вас нет
я ещё не разобрался как это сделать и было бы неплхо, если кто-то помог, и да, мне нужно найти позицю в списке
C#
1
2
if (!checkBox1.Checked) bl1 = new BindingList<D1>(bl1.OrderBy(x => x.x0).ToList());
else bl1 = new BindingList<D1>(bl1.OrderByDescending(x => x.x0).ToList());
тут у меня что-то не получлось, DataGridView остаётся без изменений...
Цитата Сообщение от Storm23 Посмотреть сообщение
будет быстрее
у меня по заданию надо использовать BinarySearch, он работает только на отсортированном списке, если бы не это я бы не городил ничего
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10425 / 5155 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
12.04.2016, 01:08
Цитата Сообщение от Ваю Посмотреть сообщение
тут у меня что-то не получлось, DataGridView остаётся без изменений...
Поскольку вы создаете новый BindingList, то вам нужно переприсвоить его в DGV:
C#
1
2
dataGridView.DataSource = null;
dataGridView.DataSource = bl1;
Цитата Сообщение от Ваю Посмотреть сообщение
у меня по заданию надо использовать BinarySearch, он работает только на отсортированном списке, если бы не это я бы не городил ничего
В таком случае, вам нужно хранить данные в уже отсортированном виде. Иначе BinarySearch теряет всякий смысл, если вы будете сортировать при каждом поиске.
Вам нужно что бы ваш BindingList всегда был отсортирован. А для этого, при вставке в него, нужно вставлять элемент не в конец а в середину, в соответствии с сортировкой (а для этого кстати тоже можно использовать BinarySearch).
1
27 / 27 / 9
Регистрация: 21.04.2015
Сообщений: 704
12.04.2016, 03:52  [ТС]
Цитата Сообщение от Storm23 Посмотреть сообщение
А для этого, при вставке в него, нужно вставлять элемент не в конец а в середину, в соответствии с сортировкой (а для этого кстати тоже можно использовать BinarySearch).
это я не знаю как это сделать, этот метод вижу первый день, да и опыта нет

Добавлено через 17 минут
Цитата Сообщение от Storm23 Посмотреть сообщение
C#
1
dataGridView.DataSource = null; dataGridView.DataSource = bl1;
присвоение источника данных вроде бы обновляет гуй без его предварительного затирания, dataGridView.DataSource = bl1; достаточно, иначе настройки слетают и их надо перезагружать

Добавлено через 28 минут
Цитата Сообщение от Storm23 Посмотреть сообщение
нужно что бы ваш класс D1 реализовывал интерфейс IComparable
чёт я ладу не дам с тем примером на мсдн, тоже нужна помощь
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10425 / 5155 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
12.04.2016, 09:48
Цитата Сообщение от Ваю Посмотреть сообщение
IComparable
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    class D1 : IComparable
    {
        public Int16? x0 { get;set; }
 
        public int CompareTo(object obj)
        {
            var other = obj as D1;
            if (other == null) return 1;
            if (other.x0 == null && x0 == null) return 0;
            if (x0 == null) return -1;
            if (other.x0 == null) return 1;
            return x0.Value.CompareTo(other.x0.Value);
        }
    }
2
27 / 27 / 9
Регистрация: 21.04.2015
Сообщений: 704
12.04.2016, 18:34  [ТС]
Что нужно сделать для реализации метода IndexOf?
C#
1
Res = bl1.IndexOf(new D1 { x0 = FindVal });
Добавлено через 10 минут
C#
1
2
3
4
5
6
private Int16? X0;
 
public D1(Int16? x0) { this.X0 = x0; }
public D1() { this.X0 = null; }
public Int16? x0 { set { X0 = value; } get { return X0; } }
public int CompareTo(object obj) {...}
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10425 / 5155 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
12.04.2016, 19:31
Цитата Сообщение от Ваю Посмотреть сообщение
Что нужно сделать для реализации метода IndexOf?
Реализовать интерфейс IEquatable<T> либо переопределить метод Equals в вашем классе D1.
0
27 / 27 / 9
Регистрация: 21.04.2015
Сообщений: 704
12.04.2016, 20:25  [ТС]
Storm23, теперь System.StackOverflowException

C#
1
2
3
4
5
6
7
8
9
10
public bool Equals(D1 Other) {
    if (x0 != null && Other != null && Other.x0 != null) return Equals(Other);
    else return false;
}
public override bool Equals(Object obj) {
    var Other = obj as D1;
    if (x0 != null && Other != null && Other.x0 != null) return Equals(Other);
    else return false;
}
public override int GetHashCode() { return this.x0.GetHashCode(); }
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
12.04.2016, 20:37
Вы же вызываете Equals из Equals, что вы ожидали кроме System.StackOverflowException?
0
27 / 27 / 9
Регистрация: 21.04.2015
Сообщений: 704
12.04.2016, 20:46  [ТС]
Storm23, у меня вопрос, сравнение реализуется на вычитании, что из чего вычитается при этом?

x0 - значение в списке; Val - искомое;

Res = x0 - Val; или Res = Val - x0;

Добавлено через 1 минуту
Someone007, я пытаюсь повторить вот это https://msdn.microsoft.com/ru-... .110).aspx
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
12.04.2016, 21:02
Цитата Сообщение от Ваю Посмотреть сообщение
я пытаюсь повторить вот это https://msdn.microsoft.com/ru-... .110).aspx
Попробуйте что-то типа этого
C#
1
2
3
4
public bool Equals(D1 Other) {
    if (x0 != null && Other != null && Other.x0 != null) return x0 == Other.x0;
    else return false;
}
1
27 / 27 / 9
Регистрация: 21.04.2015
Сообщений: 704
12.04.2016, 21:41  [ТС]
C#
1
public bool Equals(D1 Other) { if (x0 == Other.x0) return true; else return false; }
Добавлено через 3 минуты
Someone007, как у вас тоже вариант, но у меня допускаются пустые значения в списке, пожалуй обойдусь без обрезания их

Добавлено через 20 минут
а ещё лучше просто
C#
1
public bool Equals(D1 Other) { return x0 == Other.x0; }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.04.2016, 21:41
Помогаю со студенческими работами здесь

Необработанное исключение MissingManifestResourceException
Доброго времени суток. Ошибка: Необработанное исключение типа &quot;System.Resources.MissingManifestResourceException&quot; в...

В результате выполнение выдало: Необработанное исключение
Результат выполнение кода программы: using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

Необработанное исключение: System.ObjectDisposedException: Чтение из закрытого TextReader невозможно
Ошибка после запуска с консоли, когда передаю значение аргумента, помогите пожалуйста, нет вообще идей как это зафиксить using System;...

В коде используется Try catch, но все равно выбрасывается необработанное исключение
Подскажите, у меня код находится в: try { ...... } catch (Exception e) { addToLog2(&quot;error1: &quot; +...

Необработанное исключение типа "System.ArgumentException" в mscorlib.dll
Помогите пожалуйста, сегодня начал работу с .xml файлами, программа выдает при работе следующее: Необработанное исключение типа...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru