C# C布尔表达式

C# C布尔表达式,c#,boolean,expression,C#,Boolean,Expression,在下面的示例中,每次将“foo”设置为什么?我在网上搜索过,但我找不到任何能给我答案的地方: static void Main(string[] args) { static public bool abc = true; static public bool foo = (abc = false); foo = (abc = true); } 对布尔表达式使用==而不是=。第一次为false,第二次为true。请记住,=是赋值运算符:它将第二个操作数的值赋给第一个操作数,然

在下面的示例中,每次将“foo”设置为什么?我在网上搜索过,但我找不到任何能给我答案的地方:

static void Main(string[] args) {
   static public bool abc = true;
   static public bool foo = (abc = false);
   foo = (abc = true);
}

对布尔表达式使用==而不是=。

第一次为false,第二次为true。请记住,=是赋值运算符:它将第二个操作数的值赋给第一个操作数,然后返回该值。例如:

int foo = 1;
int bar = (foo = 2);
这里的第二行将2分配给foo,然后将2返回给另一个赋值运算符,该运算符将2分配给bar。最后,foo和bar的值都是2

编辑:这就是为什么链接分配操作是有效的;e、 g

int foo;
int bar;
foo = bar = 2; // Equivalent to foo = (bar = 2);

静态变量定义应该放在类级别,而不是放在方法内部。在这种情况下,初始化器将按照源代码中定义的顺序运行

这意味着abc将首先设置为true,然后foo将设置为false,因为abc为true

abc=真 abc=错误。那么foo=false abc=正确。那么foo=true
嗯,我想知道赋值是否返回布尔值。@Motig:assignments返回赋值。那么赋值操作返回的是=号的右侧吗?这就是为什么在实际代码中使用赋值的返回值可能不是个好主意的原因。不,上面的注释不正确,我认为答案是正确的。简单赋值操作不会返回右侧!赋值操作返回分配给左侧的值。这可能与右手边不同。例如,长x;int y=10;对象z=x=y;将长10指定给z,而不是int 10。捕捉得好。我想知道这是否值得迂腐,但最终决定这可能无关紧要。不要忘记,在这种情况下,运行代码并检查很容易。您要搜索的地方是规范的第7.16.1节。