if-else快捷方式惊喜

时间:2010-10-28 12:23:46

标签: c# syntax

我很惊讶第三种解决方案不起作用(编译说:; is missing)。

bool isFoobar = true;

isFoobar == true ? isFoobar = false : isFoobar = true; // [1] works
( isFoobar ? isFoobar = false : isFoobar = true ); // [2] works
isFoobar ? isFoobar = false : isFoobar = true; // [3] failed
嗯,为什么最后一个不起作用?

7 个答案:

答案 0 :(得分:7)

这些都不正确。我得到了编译器错误。

正确的语法是:

isFoobar = isFoobar ? false : true;

更新

我的陈述中出现的错误是:

1& 2:

  

只有赋值,调用,递增,递减和新对象表达式才能用作语句

3:

  

无效的表达式术语':'

     

预期

     

预期

答案 1 :(得分:7)

更好的解决方案是:

isFoobar = !isFoobar;

答案 2 :(得分:2)

当我尝试代码时,这些都不起作用。您不能将这样的表达式用作语句。

如果您将表达式用作表达式,则所有三个都可以工作:

bool isFoobar = true;
bool x;

x = isFoobar == true ? isFoobar = false : isFoobar = true;
x = ( isFoobar ? isFoobar = false : isFoobar = true );
x = isFoobar ? isFoobar = false : isFoobar = true;

如果您只想将其用作if的快捷方式,并且不想使用该结果,那么您使用它的方式是错误的。条件运算符应该用于表达式,而不是if语句。

答案 3 :(得分:1)

在.net 3.5下这项工作并编译

        bool isFoobar = true;

        var a = isFoobar == true ? isFoobar = false : isFoobar = true; // [1] works
        var b = ( isFoobar ? isFoobar = false : isFoobar = true ); // [2] works
        var c = isFoobar ? isFoobar = false : isFoobar = true; // [3] works

a,b和c是boolean类型

答案 4 :(得分:1)

你正在以错误的方式使用它。三元运算符用于根据谓词分配变量,而不是在两种情况下执行代码。

  var obj = predicate ? true_case : false_case; //if predicate is true, true_case will be assigned to obj.

答案 5 :(得分:0)

你错了 - 他们都没有编译。尝试评论第三行,看看会发生什么。三元语句的真/假部分需要返回一个你没有做的值。

答案 6 :(得分:0)

如果声明仅如下所示:

isFoobar ? isFoobar = false : isFoobar = true;

它提出了与问题相同的错误,

如果声明如下:

isFoobar ? (isFoobar = false) : (isFoobar = true);

错误:只能将赋值,调用,递增,递减和新对象表达式用作语句

相关问题