C#布尔表达式

Xen*_*ate 0 c# expression boolean

在下面的例子中,每次都会设置'foo'是什么?我在网上搜索过但我找不到能给我答案的地方:

static void Main(string[] args) {
   static public bool abc = true;
   static public bool foo = (abc = false);
   foo = (abc = true);
}
Run Code Online (Sandbox Code Playgroud)

Wil*_*den 8

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

int foo = 1;
int bar = (foo = 2);
Run Code Online (Sandbox Code Playgroud)

这里的第二行将2分配给foo,然后将2返回给另一个赋值运算符,该运算符将2分配给bar.在这一切,都结束foo,并bar拥有价值2.

编辑:这就是为什么链接赋值操作是有效的; 例如

int foo;
int bar;
foo = bar = 2; // Equivalent to foo = (bar = 2);
Run Code Online (Sandbox Code Playgroud)

  • 不,上面的评论不正确,认为答案是正确的.简单的赋值操作不会返回右侧!赋值操作返回分配给左侧*的*值.这可能与右手边*不同*.例如,"long x; int y = 10; object z =(x = y);" 将*long*10赋给z,而不是*int*10. (3认同)