首页 新闻 赞助 找找看

c#遇到的一个小问题语法方面的

0
[已解决问题] 解决于 2012-03-31 09:12
bool b = true;
Console.WriteLine(b ? "1111" : "2222222" + "3");
Console.ReadKey();

上面的代码执行结果我想是 

11113
而实际的结果确是1111。
有人知道这是为什么吗,按原理应该是11113

        
learnWindowsPhone的主页 learnWindowsPhone | 初学一级 | 园豆:38
提问于:2012-03-30 13:23
< >
分享
最佳答案
0

条件运算符(?:)是向右顺序结合,即从右到左执行计算,而在向←运算将要执行时编译器得知+优先级高于条件运算符,于是乎先执行了"2222222" + "3",而不只是+的优先级的高的问题 因此此处实际是处理 b ? "1111" : "22222223";的运算 

奖励园豆:5
Halower | 小虾三级 |园豆:1723 | 2012-03-31 00:40
其他回答(5)
0
 Console.WriteLine((b ? "1111" : "2222222") + "3");
运算符优先级问题,加上括号改变一下默认优先级吧
玉开 | 园豆:8822 (大侠五级) | 2012-03-30 13:24
0

不要依赖于默认的运算符优先级,代码中明确的使用()确定自己的代码逻辑,会使得代码更易于阅读。

zsounder | 园豆:2819 (老鸟四级) | 2012-03-30 13:51
0

+ 的优先级大于 三目运算符 ? :  

应加(b ? "1111" : "2222222") + "3"  来控制

Fishboy | 园豆:244 (菜鸟二级) | 2012-03-30 13:57
0

运算符优先级的问题,比较赞成2楼说的,加上()代码的可读性要好点,也是一个好的习惯

yangtam | 园豆:369 (菜鸟二级) | 2012-03-30 15:11
0

确实 优先级?

cnlouts | 园豆:206 (菜鸟二级) | 2012-03-30 15:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册