2012-05-11 583 views
18

上線:bool travel = fill.travel.Value;我收到以下錯誤:可爲空的對象必須有值?

Nullable object must have a value

,我不知道爲什麼。我想要做的就是獲取目前爲假的旅行數據庫中的值。任何幫助,將不勝感激。

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 
} 
+0

是什麼'getPkRowReport'返回? –

+8

聽起來像fill.travel是一個可爲空的布爾('bool?'),並且它在數據庫中爲NULL。 – driis

+1

@driis,這就是答案,所以你不妨把它放在下面。 –

回答

30

您可以隨時切換到

fill.travel.GetValueOrDefault() 

提供默認的(假),或從數據庫中的布爾列的值。或者,您可以指定超載的默認值。無論哪種方式,可空對象當前沒有值,這就是爲什麼你會得到這個異常。

3

,如果你訪問Nullable.Value屬性時HasValue屬性是假的,你會得到一個InvalidOperationException

3

您可以檢查是否爲空的變量有一些像這樣的價值之前,你的實際訪問它的價值

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

來自數據庫的值是一個可空布爾值。當您調用Nullable.Value,並且該值爲null時,您將得到此異常。考慮在調用.Value之前檢查屬性Nullable.HasValue。

3

您正在嘗試從不存在的對象訪問屬性(您fill.travel是空的,你叫從中道具), 你可以使用COALESCE操作符(.NET 4.0):

bool travel = fill.travel ?? false; 
1

空並不是虛假的。請參閱Eric Lippert的博客文章系列:http://blogs.msdn.com/b/ericlippert/archive/2012/03/26/null-is-not-false.aspx

如果您想要翻譯它,您需要將空結果處理爲假。

爲了使這一情況清楚,考慮下面的代碼:

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

或者只是使用瓦爾巴赫金的解決方案,如果您使用的是.NET 4

相關問題