我想知道为什么以下代码在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#规范).