日期:2014-05-18  浏览次数:20723 次

白痴的三元运算符问题
int   a=8;
                int   b=9;
                int       v;
                switch   (a   +   b)
                {
                        case   b=v> 8?true:false:
                }
别问我为什么这么做,我只是打个比方,也别说违背面向对象思想,我就是想这么实现,case   b=v> 8?true:false:   编译不过去,其实条件很多,所以我用case,虽然我把这个if掉了   但是还是想知道是否能实现case   b=v> 8?true:false:这句话,

在线等,请给出正确答案,别扯文言!行就给答案,不行说不行
马上给分

------解决方案--------------------
既然你不编译,我也不编译,
case b=v> 8?true:false:
这里你想得到什么呢?
b=v> 8//v右移8位,赋值给b
这里b至少不是bool类型,那就无法使用?,因为三目运算符需要?前面是个返回bool的表达式或者bool值。

不知道你想实现什么,C#里不支持逗号表达式的。
------解决方案--------------------
不行,case语句生成的IL代码看看就知道了,case中的判断条件必须是常量,但是可以进行折衷处理。
case如果搞成了变量逻辑上倒是能说过去,但是实际上运行开销就加大了,我是说不是说编译器做不到,关键看这么做的必要性和开销
------解决方案--------------------
我找到了一篇blog,有switch的C语言版和汇编版,楼主对比一下马上就明白了
http://codefan.spaces.live.com/blog/cns!a4330c839cff6d86!139.entry
------解决方案--------------------
这不是三运算符的问题,b=v> 8?true:false可以看做是赋值,
你写个case b=true试试编译能通过不?