Подтвердить что ты не робот

Нулемый объект должен иметь значение?

В строке: 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 
 }
4b9b3361

Ответ 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);