我有一個給了一個錯誤的線檢查空值:
無法確定條件表達式的類型,因爲有「串」和「INT」以整數數據類型
param[0].Value = form_request_id == null ? DBNull.Value.ToString() : form_request_id;
之間的隱式轉換
但是,form_request_id是一個int
如何檢查int數據類型中的空值?
我有一個給了一個錯誤的線檢查空值:
無法確定條件表達式的類型,因爲有「串」和「INT」以整數數據類型
param[0].Value = form_request_id == null ? DBNull.Value.ToString() : form_request_id;
之間的隱式轉換
但是,form_request_id是一個int
如何檢查int數據類型中的空值?
您的直接問題不是您正在檢查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;
int
是一個值類型,不能是null
- 它將默認爲0
。
,您可根據int
爲空的方法有兩種:
int? nullableInt = null;
或者,
Nullable<int> nullableInt = null;
兩個選項是從根本上控制在最低水平不變,我相信,前者是簡寫後者。
這實際上給出了一個包裝,它揭示了兩個有用的屬性HasValue
和HasValue
。 HasValue
可用於檢查包含的實例是否具有值其他比null
,Value
允許您檢索該值。
查看MSDN page on Nullable<T>
瞭解更多信息和示例。
正如@Justin Niessner指出的那樣,您得到的錯誤信息並不涉及這個問題,而是因爲form_request_id
和DBNull.Value.ToString()
是不同的類型。如果form_request_id
不null
,然後嘗試調用該ToString
(或使用一些其他的機制來分配所需的,不同類型的值。
除去在decleration了'var'關鍵詞,不允許他們在那裏。 – Femaref
@Femaref:太接近家庭時間了 - 感謝您的光臨。 –
D你的迴應非常有幫助。謝謝。 – user788487
大概form_request_id的類型不是整數,但
int?//or
Nullable<int>
您需要定義你int變量爲空類型,並以檢查它是否是空或不是你需要使用的HasValue。爲了訪問您可空變量的使用價值x.Value
int? x = 10;
if (x.HasValue)
{
//code here
}
的int
類型不能爲空。 int的默認值是0,所以如果你想確定它的值已經設置,你可以檢查0。
param[0].Value = nullableInt ?? DBNull.Value;
@Justin ...你的代碼很有意義。謝謝。 – user788487
由於form_request_id是一個int,我不得不修改你的代碼爲「if(form_request_id == 0)」 – user788487