Есть такой код.
Проблема в том что в foreach при первом проходе childPeriod показывает ошибку в Watch
Exception of type 'System.NullReferenceException' was thrown: Object reference not set to an instance of an object.
хотя ошибку не кидает явно и идет дальше по коду. Ошибка ниже всё равно кидается.
var childPeriods = await Get();
для дебага
[q]
var f = childPeriods.First();
var id = f.Id;
var ft = cars.First(s => s.Id == id);
[/q]
foreach (var childPeriodin childPeriods)
{
childPeriods заполняется нормально и содержит 6 элементов. Внутри посмотрел все свойства, ошибки никакое не кидает.
Для дебага добавил выше foreach код и там ошибка не кидается и всё создается.
ET>а как можно найти какое свойство кидает ошибку если много свойств и много вложенностей? Можно понять в каком свойстве ошибка?
Уверены?
ну занулите св-во у первого элемента и проверьте.
ET>>а как можно найти какое свойство кидает ошибку если много свойств и много вложенностей? Можно понять в каком свойстве ошибка? Р>Уверены? Р>ну занулите св-во у первого элемента и проверьте.
проблема что много свойств которые в свою очередь являются классом.
То есть есть у меня массив List<Car> и в одном из элементов какое-то свойство Bbb кидает NRE.
Как найти в каком элементе какое свойство кидает NRE
по типу
Car
List<CarItem> CarItems
Bamper bamper
CarItem
List<Feature> features
Feature
Serial => a.Trim() + b.trim()
Bbb => a.Trim() + c.Trim()
Здравствуйте, Разраб, Вы писали:
Р>Здравствуйте, e.thrash, Вы писали:
ET>>проблема что много свойств которые в свою очередь являются классом.
Р>Много это сколько?
там 3 уровня вложенности по свойствам часто и на каждом уровне это может быть массив элементов
Р>Еще по стартовому непонятно. В дебаге нет ошибки, а на проде есть?
в дебаге ошибка есть, просто она не кидается, т.к. это геттер свойства
просто когда я пытаюсь в такой конструкции увидеть объект то вижу вместо объекта NRE в дебаге
foreach(var car in cars)
Р>Откуда данные? из базы?
да, из базы, но NRE в геттере вычисляемого поля в шарпе
Р>Стэк трэйс полностью смотрите.
так в стектрейсе показывается точка где ошибка уже происходит, а не NRE в свойстве.
Если бы ошибки не было, то про NRE можно было и не узнать, т.к. к нему не было обращений
Car
string ErrorProperty => NRE
foreach(var car in cars)
{
...много кода
var total = dictionary[car.Id]
Код свой (в смысле исходники есть) или это какие-то сторонние сборки?
Если свой, то включай в "Exception Settings" все ошибки для "Common Language Runtime" и запускай в дебаге.
На ошибке должно вывалиться в отладчик прямо на той строке, где она возникла.
Здравствуйте, RushDevion, Вы писали:
RD>Если свой, то включай в "Exception Settings" все ошибки для "Common Language Runtime" и запускай в дебаге.
Ещё можно подписаться на AppDomain.FirstChanceException. Сам такое практикую, выводя все исключения в лог Debug-уровня. А там и по StackTrace можно размотать.
Здравствуйте, RushDevion, Вы писали:
ET>>Как такие ошибки дебажить\искать?
RD>Код свой (в смысле исходники есть) или это какие-то сторонние сборки? RD>Если свой, то включай в "Exception Settings" все ошибки для "Common Language Runtime" и запускай в дебаге.
Здравствуйте, e.thrash, Вы писали:
ET>там 3 уровня вложенности по свойствам часто и на каждом уровне это может быть массив элементов
Кто-то же его написал. Так что и проверить код реально.
Лучше уже тогда вообще покрыть тестами.
Ведь данные извне, вы их не контролируете.
Сейчас найдете одну ошибку в дебаге, завтра новая вылезет.
В итоге все равно проверите все. По времени может даже затратнее.
вам нужно понять являутся ли NRE's багом или исключением и действовать соответственно, а именно — использовать защитное кодирование типа unsafeString?.Trim() или же кидать исключение.