Вопрос

У меня есть общедоступное свойство, установленное в моей форме типа ListE<T> где:

public class ListE<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable

Да, это сложный процесс, но это то, что требуется дизайнеру, чтобы он отображался как редактируемая коллекция в окне Свойств.Что он и делает!Итак, я нажимаю маленькую кнопку [..], чтобы отредактировать коллекцию, а затем нажимаю Добавить, чтобы добавить элемент в коллекцию.

Арифметическая операция привела к переполнению.

Итак, это очень простой список, немногим больше, чем расширяющийся массив.Единственная часть, которая во всем этом близка к арифметике, - это функция expand , и даже она использует сдвиг влево, а не умножение, так что переполнения не будет.Все это заставляет меня думать, что это исключение возникает внутри конструктора, возможно, вызванное небольшим невниманием к деталям реализации с моей стороны, но я не могу найти способ протестировать или отладить этот сценарий.У кого-нибудь есть какие-нибудь умные идеи?

Редактировать:Да, я могу успешно использовать свойство, ну даже вручную, т.е.в OnLoad обработчик, и я полагаю, что именно к этому мне придется прибегнуть, если я не смогу заставить это работать, но это было бы не идеально.:(

Это было полезно?

Решение

Я не могу понять, что побуждает вас пытаться изобрести колесо списка<T> таким образом, но чтобы ответить на ваш вопрос:Я бы добавил строку "System.Diagnostics.Debugger.Break()" в конструктор вашего класса.

Затем попробуйте использовать его в конструкторе, и вы получите всплывающее окно с вопросом, хотите ли вы подключить отладчик.Подключите второй экземпляр Visual Studio в качестве отладчика, и вы сможете установить некоторые точки останова в своем коде и начать отладку.

Другие советы

Одним из мест, с которого можно начать, было бы то, что он может выполнять математические вычисления с вашим свойством ListE`1::Count.Если в этом есть какой-то тонкий изъян (т. е.это сложнее, чем return this.innerList.Count) это может быть причиной арифметического переполнения конструктора при какой-либо операции.Обычно арифметические переполнения не происходят, если только специально не запрашивается использование

checked
{
   // ...
}

синтаксис.

Вам не нужно добавлять отладчик.Break();вызовите свой код, чтобы отладить его.Вы можете просто открыть другой экземпляр VS и подключиться к тому, в котором вы его используете, и вы сможете отладить его без проблем (просто убедитесь, что у вас загружены символы).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top