我想知道为什么以下代码在 C# 6.0 中有效:
(在此示例中,data 是一个包含 val 作为公共(public)字符串的随机类)
if ("x".Equals(data.val?.ToLower()) { }
但下面这行不是:
if (data.val?.ToLower().Equals("x")) { }
Visual Studio 显示以下错误:
Cannot implicitly convert type 'bool?' to 'bool'. An explicit conversion exists (are you missing a cast?)
最佳答案
if ("x".Equals(data.val?.ToLower()) { }
最终会返回一个 bool 值,因为 Equals
的调用这个:
if (data.val?.ToLower().Equals("x")) { }
当表达式被求值时,它将返回一个 System.Nullable<bool>
这不同于 bool
(前者是一个可以赋值 null
的结构,而后者只能是 true
或 false
) if
期望。此外,在 C# 中为 null
值未计算为 false(根据 C# 规范)。
关于c# - 将 Elvis 运算符与 string.Equals 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33282656/