使用三元运算符将null分配给十进制

时间:2013-10-10 07:15:11

标签: c#

我正在转换为decimal的{​​{1}},因此它包含byte array或以字节存储的任何其他数字。这里的问题是,当我尝试将null转换为null时,会将其转换为Nullable decimal。我希望它保持zero ...

null

2 个答案:

答案 0 :(得分:13)

如果您希望结果可能为null,那么您不应该调用Convert.ToDecimal - 它总是返回decimal。相反,你应该使用:

x = obj.sal == null ? (decimal?) null 
                    : Convert.ToDecimal(Encoding.ASCII.GetString(obj.sal));

请注意,您必须将null字面值转换为decimal? - 或者使用其他形式,例如default(decimal?),以便第二个操作数的类型为decimal? - 否则编译器将无法推断条件表达式的类型。有关详细信息,请参阅this question

答案 1 :(得分:1)

因为null是object类型(实际上是无类型的),你需要将它分配给一个类型化的对象。

x = obj.sal == null ? (decimal?) null 
                : Convert.ToDecimal(Encoding.ASCII.GetString(obj.sal));