2013-10-08 103 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