?操作员VS ?? 运营商用法

Ase*_*tam 2 c#

以下声明有效:

Class.ID = odrDataReader["ID"] == null ? 0 : Convert.ToInt32(odrDataReader["ID"]);
Run Code Online (Sandbox Code Playgroud)

但以下不是:

Class.ID = odrDataReader["ID"] as int? ?? 0; //ID is always 0
Run Code Online (Sandbox Code Playgroud)

谁能解释为什么?即使ID列不为空,运算符总是返回0?

解决方案(Kirk建议):

Class.ID = Convert.ToInt32(odrDataReader["ID"] ?? 0);
Run Code Online (Sandbox Code Playgroud)

Eup*_*ric 5

在第一个中,您使用的Convert.ToInt32(odrDataReader["ID"])是第二个odrDataReader["ID"] as int?.从你说的第一个是正确的,所以你也应该在第二个使用转换.

Actualy我认为首先是好的,因为如果你真的想使用它会看起来很奇怪?运营商.

编辑:解释一下odrDataReader["ID"] as int?不是转换.如果odrDataReader ["ID"]是字符串,它将始终返回null.