我想知道为什么以下代码在C#6.0中有效:(
在此示例中,数据是一个包含val作为公共字符串的随机类)
if ("x".Equals(data.val?.ToLower()) { }
Run Code Online (Sandbox Code Playgroud)
但以下行不是:
if (data.val?.ToLower().Equals("x")) { }
Run Code Online (Sandbox Code Playgroud)
Visual Studio向我显示以下错误:
无法隐式转换类型'bool?' 'bool'.存在显式转换(您是否错过了演员?)
if ("x".Equals(data.val?.ToLower()) { }
Run Code Online (Sandbox Code Playgroud)
最终会返回一个布尔值因为Equals
调用但是这样:
if (data.val?.ToLower().Equals("x")) { }
Run Code Online (Sandbox Code Playgroud)
当表达式被计算时,它将返回一个System.Nullable<bool>
不同于a bool
(前者是可以赋值的结构,null
而后者只能是true
或者false
)if
.此外,在C#中,null
值不会计算为false(根据C#规范).