2011-06-20 58 views
1

我有一個給了一個錯誤的線檢查空值:
無法確定條件表達式的類型,因爲有「串」和「INT」以整數數據類型

param[0].Value = form_request_id == null ? DBNull.Value.ToString() : form_request_id; 
之間的隱式轉換

但是,form_request_id是一個int

如何檢查int數據類型中的空值?

回答

1

您的直接問題不是您正在檢查form_request_id中的空值(實際上它總是會評估爲false,因爲您確實需要使用int?使值實際爲空)。

真正的問題是你的條件表達式的兩邊返回不同的類型(一個是字符串,另一個是int)。

由於param[0].Value應該根據條件確實是不同的類型......您將無法在此處使用快捷方式聲明。你必須拼出來的很長的路要走:

if(form_request_id == null) 
    param[0].Value = DBNull.Value; 
else 
    param[0].Value = form_request_id; 

正如我前面提到的,你仍然需要使用int?,而不是int讓你的變量可以適當持有空值。當你這樣做的時候,你甚至不需要這個語句,因爲數據庫提供者會看到一個空值,並在幕後替換DBNull.Value。該代碼將僅僅是:

param[0].Value = form_request_id; 
+0

@Justin ...你的代碼很有意義。謝謝。 – user788487

+0

由於form_request_id是一個int,我不得不修改你的代碼爲「if(form_request_id == 0)」 – user788487

3

int是一個值類型,不能是null - 它將默認爲0

,您可根據int爲空的方法有兩種:

int? nullableInt = null; 

或者,

Nullable<int> nullableInt = null; 

兩個選項是從根本上控制在最低水平不變,我相信,前者是簡寫後者。

這實際上給出了一個包裝,它揭示了兩個有用的屬性HasValueHasValueHasValue可用於檢查包含的實例是否具有值其他null,Value允許您檢索該值。

查看MSDN page on Nullable<T>瞭解更多信息和示例。

正如@Justin Niessner指出的那樣,您得到的錯誤信息並不涉及這個問題,而是因爲form_request_idDBNull.Value.ToString()是不同的類型。如果form_request_idnull,然後嘗試調用該ToString(或使用一些其他的機制來分配所需的,不同類型的值。

+0

除去在decleration了'var'關鍵詞,不允許他們在那裏。 – Femaref

+0

@Femaref:太接近家庭時間了 - 感謝您的光臨。 –

+0

D你的迴應非常有幫助。謝謝。 – user788487

0

大概form_request_id的類型不是整數,但

int?//or 
Nullable<int> 
0

您需要定義你int變量爲空類型,並以檢查它是否是空或不是你需要使用的HasValue。爲了訪問您可空變量的使用價值x.Value

int? x = 10; 

if (x.HasValue) 
{ 
    //code here 
} 
0

int類型不能爲空。 int的默認值是0,所以如果你想確定它的值已經設置,你可以檢查0。

1
param[0].Value = nullableInt ?? DBNull.Value;