三元运算符意外结果

时间:2013-10-08 20:04:13

标签: c#

有人可以评论我遇到的问题。三元运算符抛出一个错误,这里的参数是,如果它的计算结果为null,那么它应该忽略冒号后的部分。为此设置的Watch表示例外:

Int32.Parse(SQLDataReader["TrayId"].ToString())' threw an exception of Type 'System.FormatException

建议无法将null转换为字符串。这是它的工作原理吗?

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

2 个答案:

答案 0 :(得分:3)

ShipmentId是一个整数,但它也是nullable,这意味着c#类型为int?

错误归结为此代码:

Int32.Parse((string)null)

解析已放弃,因为您无法将null变为int

要解决此问题,请使用TryParse

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

如果值为null,或者由于某些奇怪的原因,该值实际上无法转换为int(如“asdf121343fds”),则会覆盖。

答案 1 :(得分: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());