繁体   English   中英

如果为空,空条件运算符是否返回假?

[英]Does null conditional operator return false if null?

我有这个条件

if (item?.Value2?.GetType() != typeof(string) && item.get_Value() == 0)

我相信,如果 item 为空,则?. 操作将返回 null,我相信这将被解析为false导致条件短路,一切都会好起来( item.get_Value()不会被调用)

但是我不确定,我想也许我需要这样做

if (item?.Value2?.GetType() ?? 0 != typeof(string) && item.get_Value() == 0)

但我认为这可能有点矫枉过正,第一种方法是否可以避免潜在的空引用异常?

item?.Value2?.GetType()将返回null ,如果itemnullValue2null

评估的条件将是

if (null != typeof(string) && item.get_Value() == 0)

因此,当item.get_Value() == 0将被执行时,第一个条件将被解析为true导致NullReferenceException (但仅当itemnull而不是Value2

.Value2更快,但对于格式为 Date 或 Currency 的单元格, .Value2返回 Double,但.Value.get_Value()返回 DateTime 和 Decimal。 如果单元格是数字类型,则两者都会导致 Double,如果值不是数字类型或格式化为文本的数字,则结果为 String。 返回类型对于 TRUE 和 FALSE 也可以是布尔值,对于错误可以是整数。


if (0.0.Equals(item.Value2)) // if (item.Value2 is Double && (Double)(item.Value2) == 0.0) 

这可能看起来很奇怪,但它是检查运行时类型是否为 Double 且等于0.0 的最短和最安全的方法。 (如果是枚举 Range 的结果,则 item 不为 null)


至于实际问题,要找到第一个 0 单元格:

Range cell = range.Find(0, LookAt: XlLookAt.xlWhole);
if (cell != null) { /* ... */ }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM