C# 中的 'If' 条件应该是这样的吗?
Is the 'If' condition in C# supposed to behave like this?
我相信在 if 条件的谓词中执行赋值操作总是会得到 true(在 C# 和任何其他语言中)。但是,当我尝试这样的事情时并没有发生这种情况(注意我只是在 If 条件中使用单个等于):
class Program
{
static void Foo()
{
bool someVar = false;
if (someVar = true)
System.Diagnostics.Debug.WriteLine("This gets printed"); // as expected
}
static void Bar()
{
bool someVar = false;
if (someVar = false)
System.Diagnostics.Debug.WriteLine("This DOES NOT get printed"); // I exected this to be printed as well as it
}
static void Main(string[] args)
{
Foo();
Bar();
}
}
谁能解释一下?是不是因为变量 someVar 被赋予了一个假值,它没有进入 if 条件?
您提供的代码符合预期:
if (someVar = false)
表示你将 false
赋值给 someVar
所以最终结果是 if(false)
不符合条件。
因为 (someVar = false)
的 return 值将是 false
不能使用赋值运算符作为条件; equals 与 double equals 不同!如果您正在评估条件,则必须使用双等号进行比较。给定 foo
是一个 bool 变量,这: foo = true;
是一个赋值。它 将 foo
的值 赋值给 true。这: (foo == true)
不是赋值;相反,它是一个比较。它将return当前是否foo
的bool值赋值为true;如果是这样,它将 return true,否则它将 return false.
你在这里的陈述中发生的事情是,你在 if()
条件中使用比较,而不是在其中放入一个变量。通常这不是问题,我可以创建 foo
然后有一个以 foo
作为条件的 if()
语句,它将检查 foo
是真还是假。但是,您将变量传递给语句 ,同时将其赋值给一个值 。这就是为什么 foo
按照您的设置将始终打印语句,而 bar
始终不会。您所做的相当于将 foo
设置为 true 并对其进行评估,同样将 bar
设置为 false 并对其进行评估那。 :)
换句话说,这个:
bool bar = true;
if(bar = false) {
doSomething;
}
与这样做是一样的:
bool bar = true;
bar = false;
if(bar) {
doSomething;
}
因此代码永远不会 doSomething
因为 bar
总是首先设置为 false。
我相信在 if 条件的谓词中执行赋值操作总是会得到 true(在 C# 和任何其他语言中)。但是,当我尝试这样的事情时并没有发生这种情况(注意我只是在 If 条件中使用单个等于):
class Program
{
static void Foo()
{
bool someVar = false;
if (someVar = true)
System.Diagnostics.Debug.WriteLine("This gets printed"); // as expected
}
static void Bar()
{
bool someVar = false;
if (someVar = false)
System.Diagnostics.Debug.WriteLine("This DOES NOT get printed"); // I exected this to be printed as well as it
}
static void Main(string[] args)
{
Foo();
Bar();
}
}
谁能解释一下?是不是因为变量 someVar 被赋予了一个假值,它没有进入 if 条件?
您提供的代码符合预期:
if (someVar = false)
表示你将 false
赋值给 someVar
所以最终结果是 if(false)
不符合条件。
因为 (someVar = false)
的 return 值将是 false
不能使用赋值运算符作为条件; equals 与 double equals 不同!如果您正在评估条件,则必须使用双等号进行比较。给定 foo
是一个 bool 变量,这: foo = true;
是一个赋值。它 将 foo
的值 赋值给 true。这: (foo == true)
不是赋值;相反,它是一个比较。它将return当前是否foo
的bool值赋值为true;如果是这样,它将 return true,否则它将 return false.
你在这里的陈述中发生的事情是,你在 if()
条件中使用比较,而不是在其中放入一个变量。通常这不是问题,我可以创建 foo
然后有一个以 foo
作为条件的 if()
语句,它将检查 foo
是真还是假。但是,您将变量传递给语句 ,同时将其赋值给一个值 。这就是为什么 foo
按照您的设置将始终打印语句,而 bar
始终不会。您所做的相当于将 foo
设置为 true 并对其进行评估,同样将 bar
设置为 false 并对其进行评估那。 :)
换句话说,这个:
bool bar = true;
if(bar = false) {
doSomething;
}
与这样做是一样的:
bool bar = true;
bar = false;
if(bar) {
doSomething;
}
因此代码永远不会 doSomething
因为 bar
总是首先设置为 false。