c# - 将 Elvis 运算符与 string.Equals 结合使用

标签 c# .net c#-6.0

我想知道为什么以下代码在 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 的结构,而后者只能是 truefalse ) if期望。此外,在 C# 中为 null值未计算为 false(根据 C# 规范)。

关于c# - 将 Elvis 运算符与 string.Equals 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33282656/

相关文章:

c# - 将 `Task.WhenAll` 与 `INotifyCompletion` 一起使用

c# - 在 `while` 循环中,为什​​么我不能像在 `for` 循环中那样在条件中声明变量?

.net - Dapper 使用 .net 4.6 失败 - 无法加载文件或程序集

c# - 自动属性初始化与构造函数初始化哪个优先?

c# - 使用 nameof 运算符而不是 CallerMemberNameAttribute 来通知 .NET 4.5.3 中的属性更改有什么好处吗?

c# - 输入流格式不正确

c# - Azure函数 "Could not load file or assembly"

c# - ListView 显示项目但不显示组

.net - 从自定义类型 F# 的列表中过滤不同的值

c# - 为什么 null 传播不一致地传播 Nullable<T>?