none
关于C# 的赋值运算符? RRS feed

  • 问题

  • 我在MVC 2.0 中看到的代码中有这个

          string thisAreaName = string.Empty;
          bool usingAreas = false;
          usingAreas |= (thisAreaName.Length > 0);
          Console.WriteLine(usingAreas);  //打印出 false
    
    
    
          string thisAreaName = string.Empty;
          bool usingAreas |= (thisAreaName.Length > 0);  //编译出错:无效的表达式项“|=”
          Console.WriteLine(usingAreas);
    
    不明白,这是什么运算符?
    2010年12月16日 1:47

答案

  • dea,

    请参考

    [|= Operator (C# Reference)]
    http://msdn.microsoft.com/zh-cn/library/h5f1zzaw.aspx

    至于她会出错,是因未变数未初始化,你必须要初始化它才能比较

    bool
     usingAreas |= (thisAreaName.Length > 0); //编译出错:无效的表达式项“|=”
    

    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    • 已标记为答案 Paul Zhou 2010年12月17日 8:17
    • 取消答案标记 陈书函 2010年12月17日 8:46
    • 已标记为答案 陈书函 2010年12月17日 11:37
    2010年12月16日 10:26

全部回复

  • DEAR
    应该是这样
    bool usingAreas = (thisAreaName.Length > 0)
    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2010年12月16日 5:46
  • 请问“|=”为什么在C# 中可以用?

       string thisAreaName = string.Empty;
       bool usingAreas = false;
       usingAreas |= (thisAreaName.Length > 0);
       Console.WriteLine(usingAreas); //打印出 false
    
    
    

    上面的代码编译和运行都没有错!

    请教。

     


    2010年12月16日 6:25
  • dea,

    请参考

    [|= Operator (C# Reference)]
    http://msdn.microsoft.com/zh-cn/library/h5f1zzaw.aspx

    至于她会出错,是因未变数未初始化,你必须要初始化它才能比较

    bool
     usingAreas |= (thisAreaName.Length > 0); //编译出错:无效的表达式项“|=”
    

    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    • 已标记为答案 Paul Zhou 2010年12月17日 8:17
    • 取消答案标记 陈书函 2010年12月17日 8:46
    • 已标记为答案 陈书函 2010年12月17日 11:37
    2010年12月16日 10:26
  • 谢谢!不知道应该怪我没有找MSDN,还是要怪微软把简单的东西搞复杂了,有些运算符可以去掉的。
    2010年12月16日 11:16
  • dear
    这是为了要做or运算的并非搞复杂,比如
    x |= y 是 x = x | y 的缩写,这就像x=x+1可以缩写成x++一样

    你看msdn的例子后你有时做吗?

    int a = 0x0c; →这等于12
    a |= 0x06;    →这等于6
    两个做了or运算后变成14


    建议你还是要先全面了解在下判断


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2010年12月16日 14:55
  • MSDN我很少看,碰到问题了就百度、Google,搜索到MSDN了就会看。不太明白“按位与”、“按位或”、“异或”、“按位取反”,只明白“按位左移”和“按位右移”。不明白这些位运算在C#中有什么作用。

     

          int a = 12 | 6;
          Console.WriteLine(a); //打印 14,为什么啊?  
          Console.ReadKey();
    
    求解!

     


    2010年12月17日 3:37
  • dear
    这些运算都是在处理二进位运算,省掉了你进制的转换动作
    OR运算:
      1100
    + 0110
    ------------
      1110   

    用在布林OR运算
    true  | false = true
    true  | true  = true
    false | true  = true
    false | false = false
     
    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2010年12月17日 4:50
  • 请问

      1100
    + 0110
    ------------
      1110   

    怎么就等于二进制的1110了?还有“按位或”就是二进制相加吗?

    那“按位与”、“异或”、“按位取反”呢?也是相加吗?

    请教?


    2010年12月17日 8:16
  • dear
    这是计算机概论,已经不是程式语言了,建议您往这方面的资讯学起,理工科系的学生应该都有学过,如果你不是理工科系,你可去图书馆翻书,这东西在台湾叫真值表。

    [真值表]
    http://zh.wikipedia.org/zh-hant/%E7%9C%9F%E5%80%BC%E8%A1%A8

    [真值表概念]
    http://www.wretch.cc/blog/ksummery/12001229

    or运算
    1+1=1
    1+0=1
    0+1=1
    0+0=0

    and运算
    1*0=1
    1*1=1
    0*1=0
    1*1=1


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2010年12月17日 10:34
  • 我不是理工科系的,但我努力补上的!

    非常感谢您这么耐心的帮助!


    2010年12月17日 11:36