<分区>
如果条件 param.days
是一个字符串,我有以下内容。
if (param.days != null)
这很好用,但是如果我说
If (param.days)
那么它在运行时无法正确评估。这两个语句在 C# 中并不相同。
它确实表示该值为 null,但随后 C# 尝试将其转换为不可为 null 的 bool。
为什么 C# 设计者选择这样做?
这样的语句在 C++ 中有效,但为什么在 C# 中不被认为有效?
标签 c#
<分区>
如果条件 param.days
是一个字符串,我有以下内容。
if (param.days != null)
这很好用,但是如果我说
If (param.days)
那么它在运行时无法正确评估。这两个语句在 C# 中并不相同。
它确实表示该值为 null,但随后 C# 尝试将其转换为不可为 null 的 bool。
为什么 C# 设计者选择这样做?
这样的语句在 C++ 中有效,但为什么在 C# 中不被认为有效?
最佳答案
Such a statement is valid in C++, but why is this not considered valid in C#
因为 C# 采用不同的语言规则。它不假设每个数字/引用都可以通过检查它是零还是非零,空还是非空来视为 bool 值。如果你想测试某物是否为空:测试它是否为空。
注意:如果days
实际上是一个 T?
(又名 Nullable<T>
),然后您可以检查:
if(param.days.HasValue)
然后与 if(param.days != null)
相同
或者,如果您的类型可以明智地被视为 bool 值,那么您可以覆盖一些运算符来告诉编译器这一点。
关于c# - 为什么在 C# 中不允许这样做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17922065/