【发布时间】:2014-06-17 22:32:35
【问题描述】:
以我在整个编程过程中理解条件的方式,无论是 if 语句、while 循环等 - 将特定语句检查为真或假。
这是我通常使用条件的方式,但我经常遇到其他人的代码包含奇怪的条件,其中似乎没有特定的评估,只是一个普通的变量。例如:
someType aVariable = someValue;
If (aVariable)
{
//do this
}
在这种情况下,什么会被评估为真或假?显然,如果 aVariable 表示布尔值,那将很简单,但通常显式值根本不是布尔值,并且通常包含 NULL。再一次,我几乎在我看过的每一种语言中都看到了这一点,所以我假设这不是特定于语言的。
编辑 1:我已经知道这可能取决于语言,我将补充一点,我在 C# 中经常看到这一点,有问题的变量可以是参考类型或值类型。
编辑 2:所有非常好的答案,我总结如下:
(a) 特定的非布尔变量是否可以被评估为布尔变量取决于语言 (b) 在许多情况下,如果语言支持这种评估,任何非零、非空或非 NULL 值通常评估为 TRUE (C/C++ int's) (c) 对于不支持这种隐式求值的语言,需要在类定义中添加转换为 bool,例如 (C#)
【问题讨论】:
-
我确信细微差别取决于语言。在 php 中,
if语句将评估为true,如果:aVariable包含布尔值 true、任意长度的字符串、包含任何非空元素的数组、包含任何非空元素的对象或零以外的数字。如果aVariable包含false、无长度字符串、数字0、空数组、空对象或null,则if 语句的计算结果为false。在 javascript 中也是如此。 -
除非
aVariable是bool或隐式转换为bool,否则您不能在C# 中执行此操作。 -
Lee - 我不能保证这个例子的真实性,但这里至少在 C# 中引用了它。查看底部附近的代码 - answers.unity3d.com/questions/439308/…
-
@StevenNikolic - 是的,看起来他们在其基础
Object类中提供了到bool的隐式转换。我已经添加了答案。
标签: c# variables conditional