我很惊讶第三种解决方案不起作用(编译说:; 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
嗯,为什么最后一个不起作用?
答案 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);
错误:只能将赋值,调用,递增,递减和新对象表达式用作语句