В моей программе я перебираю данные, чтобы получать данные из каждого поля. Одна строка моего кода выглядит так:
int LYSMKWh = Convert.ToInt32(resultsDT.Rows[currentRow]["LYSMKWh"]);
В принципе, я просто беру значение, которое в ячейке, и преобразовываю его в int32. Я сталкиваюсь с проблемой, хотя, когда данные в поле являются нулевыми. Я получаю сообщение об ошибке Invalid Cast о невозможности конвертировать "DBNull" в другой тип.
Итак, я знаю, что я могу просто проверить значение поля, прежде чем пытаюсь преобразовать его, выполнив что-то вроде этого:
if (resultsDT.Rows[currentRow]["LYSMKWh"] == null)
{
resultsDT.Rows[currentRow]["LYSMKWh"] = 0;
}
Но есть ли лучший способ сделать это? Есть ли что-то, что я могу сделать "inline", пока я пытаюсь преобразовать значение, не прибегая к использованию if
?
EDIT: я попытался использовать этот предложенный метод:
int LYSMKWh = Convert.ToInt32(resultsDT.Rows[currentRow]["LYSMKWh"] ?? "0");
К сожалению, я все еще получил сообщение об ошибке Invalid Cast в отношении типа DBNull. Было высказано предположение, что у меня могут быть проблемы с использованием если типы с обеих сторон были разными.
Кроме того, поскольку у меня есть полный контроль над данными, с которыми я строю свой datatable, я изменил его так, чтобы никакие нулевые значения не были записаны ни в какое поле. Таким образом, это в значительной степени отрицает необходимость преобразования null в int32, в этом случае. Спасибо за все советы, всем!