Обнуляемые типы подходят для пустых полей.
Обработка задания с троичным: -
ParentID = ( dr["ParentID"] is DBNull ) ? null : (int)dr["ParentID"];
Кроме того, вам не нужно использовать Convert, если вы знаете, каковы ваши базовые поля БД и их представления .NET.
Я ограничиваю использование функции convert для ситуаций , где я знаю, что типы различаются (скажем, int для строки).
Когда я знаю соответствующий тип .NET, я просто произнесу: -
listCustomers.Add(new Customer(
(int)dr["CustomerID"],
(string)dr["CompanyName"],
(string)dr["BusinessAddress"],
(string)dr["Phone"],
( dr["ParentID"] is DBNull ) ? null : (int)dr["ParentID"]));
Наконец, при использовании обнуляемых типов помните, что перегрузка метода может быть потенциальной проблемой.
Рассмотрим следующие примеры: -
public void Populate( int? facilityId, string name, bool? somethingElse )...
public void Populate( string facilityCode, string name, bool? somethingElse )...
Одинаковое количество аргументов, все параметры потенциально нулевые. Когда первый параметр имеет значение null, вы можете быть удивлены интерпретацией, которую в конечном итоге выберет ваш компилятор. В любом случае, меня уже поймали.