Нулемый объект должен иметь значение?
В строке: bool travel = fill.travel.Value;
Я получаю следующую ошибку:
Nullable object должен иметь значение
и я не уверен, почему. Все, что я хочу сделать, это получить значение в базе данных путешествия, которое в настоящее время является ложным. Любая помощь будет оценена по достоинству.
using (var db = new DataClasses1DataContext())
{
var fill = (from f in db.expenseHdrs
where f.rptNo == getPkRowReport()
select f).FirstOrDefault();
txtReportDesc.Text = fill.description;
txtPeriod.Text = fill.period;
txtPurpose.Text = fill.purpose;
bool travel = fill.travel.Value;
chkTravel.Checked = travel
}
Ответы
Ответ 1
Вы всегда можете переключиться на
fill.travel.GetValueOrDefault()
Предоставить значение по умолчанию (false) или значение булевского столбца из базы данных. Или вы можете указать значение по умолчанию с перегрузкой. В любом случае, nullable в настоящее время не имеет значения, поэтому вы получаете это исключение.
Ответ 2
Вы пытаетесь получить доступ к свойству из несуществующего объекта (ваш fill.travel имеет значение null, и вы вызываете его)
вы можете использовать оператор coalesce (.Net 4.0):
bool travel = fill.travel ?? false;
Ответ 3
Вы получите InvalidOperationException
, если вы получите доступ к свойству Nullable.Value, когда свойство HasValue является ложным.
Ответ 4
Вы можете проверить, имеет ли значение переменной NULL значение, подобное этому, до того, как вы действительно получите доступ к его значению
if(fill.travel.HasValue)
{
bool travel = fill.travel.Value;
}
Ответ 5
Значение, поступающее из базы данных, является логическим значением с нулевым значением. Когда вы вызываете Nullable.Value, а значение равно null, вы получите это исключение. Рассмотрите возможность проверки свойства Nullable.HasValue перед вызовом .Value.
Ответ 6
Null не является ложным. См. Статью Эрика Липперта об этой статье: http://blogs.msdn.com/b/ericlippert/archive/2012/03/26/null-is-not-false.aspx
Вам нужно обработать нулевой результат в false, если вы хотите его перевести.
Чтобы сделать этот случай ясным, рассмотрите этот код:
bool travel;
bool? temptravel = fill.travel.Value;
if( temptravel == true )
travel = true;
else
travel = false;
Или просто используйте решение Вал Бахтина, если вы используете .Net 4
Ответ 7
Вы всегда можете использовать классический C? Оператор, как это:
bool travel = (fill.travel == null ? false : fill.travel.Value);