【问题标题】:C# Boolean expressionsC# 布尔表达式
【发布时间】:2010-01-07 10:44:14
【问题描述】:

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

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

【问题讨论】:

  • 不要忘记,在这种情况下,只需运行代码并检查即可。
  • 你要搜索的地方是规范的7.16.1节。

标签: c# boolean expression


【解决方案1】:

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

int foo = 1;
int bar = (foo = 2);

这里的第二行将 2 赋值给foo,然后将 2 返回给另一个赋值运算符,后者将 2 赋值给 bar。最后,foobar 的值都是 2。

编辑:这就是链接赋值操作有效的原因;例如

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

【讨论】:

  • 那么赋值操作返回=符号的右侧?
  • 这种不清晰正是为什么在实际代码中使用赋值返回值可能是个坏主意。
  • 不,上面的评论不正确,认为答案是正确的。简单的赋值操作不会返回右手边!赋值操作返回赋值给左侧的值。这可能与右侧不同。例如,“long x; int y = 10; object z = (x = y);”将 long 10 分配给 z,而不是 int 10.
  • 好收获。我想知道是否值得迂腐,但最终决定这可能无关紧要。
【解决方案2】:

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

【讨论】:

  • 嗯,我想知道赋值是否返回布尔值。
  • @Motig:赋值返回赋值。
【解决方案3】:
  1. abc = 真
  2. abc = 假。然后 foo = false
  3. abc = 真。然后 foo = true

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-08-26
      • 1970-01-01
      • 2010-10-17
      • 2010-09-21
      • 2012-05-17
      • 2017-12-26
      • 2019-01-05
      • 1970-01-01
      • 2012-04-18
      相关资源
      最近更新 更多