2013-10-08 102 views
1

有人可以對我遇到的問題發表評論。三元運算符拋出一個錯誤,這裏的參數是,如果它的計算結果爲null,那麼它應該忽略冒號後面的部分。爲此設置的手錶表示一個例外:三元運算符意外結果

​​

暗示它不能將null轉換爲字符串。這是如何工作的?

ShipmentId = SQLDataReader["ShipmentId"] == DBNull.Value ? 0 : Int32.Parse(SQLDataReader["ShipmentId"].ToString()), 
+3

'FormatException'通常表示它不能將它解析爲'int'。 –

+1

你應該看到你實際回來的東西。 –

+0

試試'null'而不是'DBNull.Value'' – Jonesopolis

回答

1

它的建議,與DBNull的比較,您使用DBNull.Value.Equals方法,因爲這頁上介紹:http://msdn.microsoft.com/en-us/library/system.dbnull.value.aspx

ShipmentId = DBNull.Value.Equals(SQLDataReader["ShipmentId"]) ? 0 : Int32.Parse(SQLDataReader["ShipmentId"].ToString()); 
+0

感謝您的幫助。我有一些其他問題,但最終你的代碼工作!祝你有個美好的一天,尼克! – Risho

3

ShipmentId是一個整數,但它也是nullable,這意味着c#類型是int?

的錯誤歸結爲以下代碼:

Int32.Parse((string)null) 

解析放棄,因爲你不能把nullint

要解決此問題,請使用TryParse

int ShipmentId = 0; 
int.TryParse(SQLDataReader["ShipmentId"].ToString(), out ShipmentId); 

如果該值是null,或這將覆蓋如果一些奇怪的原因的值實際上不能轉換爲int(如「asdf121343fds」)。

+0

感謝您的發佈。我嘗試過TryParse,但它不起作用,但由於其他原因,我認爲 - 我的列不匹配,這是我的愚蠢錯誤。所以當我試着@Nick Raverty的建議時,我發現了我的不匹配的列,所以這是一個讓他們感到擔憂的問題。 – Risho

+0

@Risho,是的,我發佈了15分鐘後我發佈了我的答案,您的錯誤消息和您的代碼示例使用不同的列。 – gunr2171