【发布时间】:2015-10-22 13:49:16
【问题描述】:
我想知道为什么以下代码在 C# 6.0 中有效:
(在本例中,data 是一个包含 val 作为公共字符串的随机类)
if ("x".Equals(data.val?.ToLower()) { }
但以下行不是:
if (data.val?.ToLower().Equals("x")) { }
Visual Studio 显示以下错误:
不能隐式转换类型'bool?' '布尔'。存在显式转换(您是否缺少演员表?)
【问题讨论】:
-
如果 (null) ,你会如何处理?这可以用 data.val 返回什么?
-
我认为因为 "x".Equals 返回 bool,而 data.val?..... 可以返回 null。而且null不能转成bool。
-
我们团队中有一个人几个月来一直称它为
Evlis operator。以为只有他一个。 -
我猜是因为
data.val?是bool?,换句话说,它可以为空。所以你可以做"x".Equals(null),但如果val为空,整个事情将评估为null。所以你需要类似if(data.val?.ToLower().Equals("x") == true) {} -
我建议你使用
object.Equals(data.val?.ToLower(),"x"),而不用担心评估结果。