行: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
}
いつでも切り替えることができます
fill.travel.GetValueOrDefault()
デフォルト(false)、またはデータベースのブール列の値を提供します。または、オーバーロードでデフォルトを指定できます。いずれにせよ、nullableには現在値がありません。そのため、この例外が発生します。
存在しないオブジェクトからプロパティにアクセスしようとしています(fill.travelがnullであり、それからpropを呼び出しています)。合体演算子(.Net 4.0)を使用できます。
bool travel = fill.travel ?? false;
HasValueプロパティがfalseのときにNullable.Valueプロパティにアクセスすると、InvalidOperationException
を取得します。
実際に値にアクセスする前に、null許容変数にこのような値があるかどうかを確認できます
if(fill.travel.HasValue)
{
bool travel = fill.travel.Value;
}
データベースから取得した値は、nullを許可するブール値です。 Nullable.Valueを呼び出し、値がnullの場合、この例外が発生します。 .Valueを呼び出す前に、プロパティNullable.HasValueを確認することを検討してください。
ヌルは偽ではありません。これについての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のソリューションを使用してください
いつでもクラシックCを使用できますか?このような演算子:
bool travel = (fill.travel == null ? false : fill.travel.Value);
このようなコードがあったため、私はこれを起こした:
bool? someVariable = (bool)someNullableBool;
SomeNullableBoolはnullであり、このエラーがスローされました。
解決策は、次のように書き直すことでした。
bool? someVariable = (bool?)someNullableBool;