web-dev-qa-db-ja.com

Nullableオブジェクトには値が必要ですか?

行:bool travel = fill.travel.Value;次のエラーが表示されます。

Nullableオブジェクトには値が必要です

そして、なぜかわかりません。私がやりたいのは、旅行のデータベースの値を取得することです。任意の助けをいただければ幸いです。

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 
 }
33
Sealer_05

いつでも切り替えることができます

 fill.travel.GetValueOrDefault()

デフォルト(false)、またはデータベースのブール列の値を提供します。または、オーバーロードでデフォルトを指定できます。いずれにせよ、nullableには現在値がありません。そのため、この例外が発生します。

46
Tejs

存在しないオブジェクトからプロパティにアクセスしようとしています(fill.travelがnullであり、それからpropを呼び出しています)。合体演算子(.Net 4.0)を使用できます。

bool travel = fill.travel ?? false;
8
Val Bakhtin

HasValueプロパティがfalseのときにNullable.Valueプロパティにアクセスすると、InvalidOperationExceptionを取得します。

4
Peter Ritchie

実際に値にアクセスする前に、null許容変数にこのような値があるかどうかを確認できます

if(fill.travel.HasValue)
{
   bool travel = fill.travel.Value;
}
3
Adil

データベースから取得した値は、nullを許可するブール値です。 Nullable.Valueを呼び出し、値がnullの場合、この例外が発生します。 .Valueを呼び出す前に、プロパティNullable.HasValueを確認することを検討してください。

3
Oblivion2000

ヌルは偽ではありません。これについてのEric Lippertのブログ記事シリーズを参照してください: http://blogs.msdn.com/b/ericlippert/archive/2012/03/26/null-is-not-false.aspx

Nullの結果を処理してfalseに変換する必要がある場合は、それを変換する必要があります。

このケースを明確にするために、次のコードを検討してください。

bool travel;
bool? temptravel = fill.travel.Value;
if( temptravel == true )
    travel = true;
else
    travel = false;

または、.Net 4を使用している場合は、Val Bakhtinのソリューションを使用してください

1
StarPilot

いつでもクラシックCを使用できますか?このような演算子:

bool travel = (fill.travel == null ? false : fill.travel.Value);

このようなコードがあったため、私はこれを起こした:

bool? someVariable = (bool)someNullableBool;

SomeNullableBoolはnullであり、このエラーがスローされました。

解決策は、次のように書き直すことでした。

bool? someVariable = (bool?)someNullableBool;
0