以下语句有效:
Class.ID = odrDataReader["ID"] == null ? 0 : Convert.ToInt32(odrDataReader["ID"]);
但是以下内容却没有:
Class.ID = odrDataReader["ID"] as int? ?? 0; //ID is always 0
任何人都可以解释为什么?即使ID列不为null,运算符也始终返回0?
解决方案(由柯克建议):
Class.ID = Convert.ToInt32(odrDataReader["ID"] ?? 0);
最佳答案
在第一个中使用Convert.ToInt32(odrDataReader["ID"])
,在第二个中使用odrDataReader["ID"] as int?
。
从您所说的第一个是正确的,因此您也应该在第二个中使用Convert。
实际上,我认为首先是可以的,因为如果您真的想使用??,这看起来会很奇怪。操作员。
编辑:
稍微说明一下odrDataReader["ID"] as int?
不是转换。如果odrDataReader [“ ID”]是字符串,它将始终返回null。
关于c# - ?运算符VS ??运算符(operator)用法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4895163/