黑马程序员技术交流社区

标题: 关系运算符==的问题 [打印本页]

作者: 申延超    时间: 2012-7-21 13:01
标题: 关系运算符==的问题
我要判断各月份有多少天,不用switch  case, 用if的话


            Console.WriteLine("请输入月份:");
            int month = Convert.ToInt32(Console.ReadLine());
                   if(month==1)
                       为啥不能写成   if(month==1,3,5,7,10,12)
(就是说直接判断month的值为1,3,5,7,10,12中的某一个,)
而不用写成  if(month=1)
                       {
                       }
                  if(month=2)
                      {
                      }
                  if(month=3)
                      {
                      }
            
                    
作者: 康子龙    时间: 2012-7-21 13:25
只能说语法就是这么规定的没啥为什么,==是二元运算符只能带有两个参数。
或许这么说更明白点,当你对==符号进行运算符重载时,参数的类型必须与声明该运算符的类或结构的类型相同也就是如下:

  1. public static Complex operator ==(Complex c1, Complex c2)
复制代码
这就说明了C#对其的定义就是==右边只能有一个参数,而且我知道的所有语言都是只能进行二元运算
作者: 刘建素    时间: 2012-7-21 13:28
==为关系运算符 关系操作符都是二元运算符 顾名思义只能是两个表达式之间的比较  返回值为 true,false  你写的 int 型 的month  和 (1,2,3)明显不是两个表达式之间的比较
作者: 申延超    时间: 2012-7-21 13:39
哦  忘记二元运算符这回事了  ,谢谢回复
作者: 王超    时间: 2012-7-21 16:10
=表示的是赋值运算符
==表示的关系运算符
作者: 宫明星    时间: 2012-7-21 16:28
楼上几位该说的都说了
一个是赋值,一个是关系。
性质就不一样。
作者: 京鱼龙    时间: 2012-7-21 21:38
想法是好,但是要想到运算速度的关系,虽然微不足道,还有代码的从简性,你或者可以写成if(month==1||month==2||......||month==12),这种方法比一个一个判断要好些。但是也不可取。这样代码阅读起来太长费劲。最简单的还是一次性写完。
作者: ARMdong    时间: 2012-7-21 23:51
当用month=1时,意思是将1赋值给month;
用month==1时,才是比较month的值是不是等于1;
当month的值为1时,表达式(month==1)的值为true,month不为1,表达式的值为false。
作者: 曾玉锋    时间: 2012-7-22 09:47
正是因为这样的原因,开发人员也有和楼主一样的想法,所以才有swith.....case....的问世啊!  多值判断,如果不想用if,那就用switch...case最合适。
作者: 黑马李果    时间: 2012-7-26 20:33
if(month==1,3,5,7,10,12), 哪有这种想当然的语法?

可以这样写:
if (new []{1,3,5,7,8,10,12}.Contains(month))

作者: 张腾达    时间: 2012-7-26 20:48
我比较喜欢switch 哈哈 结构多清晰啊
作者: 吴清华    时间: 2012-7-29 21:11
=是赋值运算符,=左边必须是个变量而不能是表达式或者常量。=右边则没有这些限制。
==是二元关系运算符,相当于数学上的等号 判断左右两边的值是否相等,返回的是布尔类型的值为真或者假、
作者: 郭正续    时间: 2012-7-30 08:51
==是个二元运算符,所以只能一个一个来判断,如果写成 if(month==1,3,5,7,10,12)是违背程序规定的





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2