下面的语句有效:
Class.ID = odrDataReader["ID"] == null ? 0 : Convert.ToInt32(odrDataReader["ID"]);
但以下不是:
Class.ID = odrDataReader["ID"] as int? ?? 0; //ID is always 0
谁能解释一下为什么??即使 ID 列不为空,运算符也始终返回 0?
解决方案(柯克建议):
Class.ID = Convert.ToInt32(odrDataReader["ID"] ?? 0);
最佳答案
在第一个中使用 Convert.ToInt32(odrDataReader["ID"])
在第二个中使用 odrDataReader["ID"] as int?
。
从你说的第一个是正确的,所以你也应该在第二个中使用 Convert。
其实我觉得 first 很好,因为如果你真的想用 ?? 会看起来很奇怪运营商。
编辑:
稍微解释一下 odrDataReader["ID"] as int?
不是转换。如果 odrDataReader["ID"] 是字符串,它将始终返回 null。
关于c# - ?运营商VS??运营商使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4895163/