У меня есть код .ToDictionary работает неожиданно и выбрасывает ошибку «Ссылка на объект не найдена»..ToDictionary throws exception "NullReferenceException"
var serviceOptions = serviceDurations.ToDictionary(so => so.OptionCode, StringComparer.OrdinalIgnoreCase);
var serviceLines = serivceLinePayments.Select(sl => new ServiceLine(serviceOptions[sl.option_code], Decimal.ToInt32(sl.quantity), sl.customer_paid_amount));
если я заменяю этот код как.
var serviceOptions = serviceDurations.ToDictionary(so => so.OptionCode, StringComparer.OrdinalIgnoreCase);
//var serviceLines = serivceLinePayments.Select(sl => new ServiceLine(serviceOptions[sl.option_code], Decimal.ToInt32(sl.quantity), sl.customer_paid_amount));
List<ServiceLine> serviceLines = new List<ServiceLine>();
foreach (var item in serivceLinePayments)
{
var so = serviceOptions.FirstOrDefault(s => s.Value.OptionCode == item.option_code);
ServiceLine line = new ServiceLine(so.Value, Decimal.ToInt32(item.quantity), item.customer_paid_amount);
serviceLines.Add(line);
}
с помощью этого кода не исключение, но не в состоянии выяснить, что является реальной причиной этого исключения.
Действительно? Тогда почему эта точная линия работает во втором фрагменте? –
Действительно? Нереалистично? нет идеи, но может быть какая-то другая веская причина для NRE? Возможно, мне не хватает ... ты говоришь мне. – Rahul
Я думаю, что компилятор обрабатывает код выражения лямбда по-разному, что мы видели (отлаживаем шаг за шагом). в первой строке .ToDictionary (...) пытается создать словарь, но выражение lamda 2-й строки входит в изображение и пытается извлечь значение из объекта словаря, который еще не создан. – Prashant