[英]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
,如果item
为null
或Value2
为null
。
评估的条件将是
if (null != typeof(string) && item.get_Value() == 0)
因此,当item.get_Value() == 0
将被执行时,第一个条件将被解析为true
导致NullReferenceException
(但仅当item
为null
而不是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.