1

有人可以评论我遇到的问题。三元运算符会抛出一个错误,这里的论点是,如果它的计算结果为 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()),
4

2 回答 2

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”)。

于 2013-10-08T20:13:49.887 回答
2

建议您使用 DBNull.Value.Equals 方法与 DBNull 进行比较,如本页所述:http: //msdn.microsoft.com/en-us/library/system.dbnull.value.aspx

ShipmentId = DBNull.Value.Equals(SQLDataReader["ShipmentId"]) ? 0 : Int32.Parse(SQLDataReader["ShipmentId"].ToString());
于 2013-10-08T20:11:11.967 回答