我刚刚看到了这行代码:
Item = (int?)(int)row["Item"];
有没有特殊原因不能简单地这样写:
Item = (int?)row["Item"];
我刚刚看到了这行代码:
Item = (int?)(int)row["Item"];
有没有特殊原因不能简单地这样写:
Item = (int?)row["Item"];
int?
不会执行隐式检查null。int val;
var success = int.TryParse(Convert.ToString(row["Item"]), out val);
Item = success ? (int?)val : (int?)null;
Item = (int?)(int)row["Item"];
如果row["Item"]
为空,这一行代码会抛出异常。这是一个不好的做法,请勿这样做。
你可以使用as
关键字。
Item = row["Item"] as int?;
as
运算符会返回null
。 - Michael Liu(int?)row["Item"]
相对于 row["Item"] as int?
有什么优势? - Michael Earls你实际上可以将 null
强制转换为可空类型
Item = sdr.IsDBNull(sdr.GetOrdinal("Item")) ? (int?)null : (int)row["Item"];
我不太确定这可能会引起什么异常,但我已经使用它而没有问题。
row["Item"]
为null
,包含一个int
或其他内容时)。 - Odedrow["Item"]
包含一个object
,试图直接将其转换为可空整数是一个不好的想法。 - Security Hound