for(int k=1;k<=10;++k){
if (receiveMessage[k].Equals("故障")){

switch(k)
{    
     case 1:button1.Text="123";
   break;
      case 2:button2.Text="123";
                    break;
  case 3:button3.Text="123";
        break;
  case 4:button4.Text="123";
         break;
  case 5:button5.Text="123";
         break;
  default:break;
  }  }
}在运行时报
未处理的“System.NullReferenceException”类型的异常出现在 system.windows.forms.dll 中。
其他信息: 未将对象引用设置到对象的实例。为什么会报这个错误?感觉是receiveMessage[k].Equals("故障")报错,因为将这一句改为(receiveMessage[k]=="故障")后就不抱错了,但后面的语句永远也无法执行.高手看看是什么原因?

解决方案 »

  1.   

    Equals是比较两个对象是否相等,默认情况下object的Equals是测试两个对象的引用等价。
      

  2.   

    如果你要测试两个对象是否为值相等则要重写Equals,或者用其它的方法,上面的可以试试tostring()
      

  3.   

    依楼上如何来比较是否相等?Equals应与"=="等价.问题可能不在此.
      

  4.   

    receiveMessage[k],一定是你这个数组没有初始化或没有附值。
      

  5.   

    receiveMessage[k] 等于null了吧?
      

  6.   

    问题好象在这一句receiveMessage[k]=Encoding.BigEndianUnicode.getstring(bb).编码形式不对.谁有办法将Encoding.BigEndianUnicode.getstring转化为正常的字符串呀,那样问题就解决了.
    我用的socket通信,要将接收下来的字符串保存,必须用Encoding.BigEndianUnicode.getstring这个编码,但收下来后,就无法与正常的字符串比较了呀!
      

  7.   

    你的case1好像永远也不会执行吧??
      

  8.   

    K是int型,而“故障”是string型,你先进行类型转换再试一下
      

  9.   

    我是receiveMessage[k]与"故障"比较!
    关键是receiveMessage[k]=Encoding.BigEndianUnicode.getstring(bb)得到的编码与"故障"的编码类型不一致,谁有好的办法让这两个编码转换为一致?!
      

  10.   

    System.Text.Encoding.Default.GetString
    System.Text.Encoding.Unicode.GetString 
    System.Text.Encoding.UTF7.GetString 
    System.Text.Encoding.UTF8.GetString
      

  11.   

    receiveMessage[k]没有赋值,这个receiveMessage为空,如果你先给他赋个值就不会了
      

  12.   

    不是空值的问题,就是socket通信发过来的流被转换为字符串后加入了什么,将其末尾某个符号去掉就好了.
      

  13.   

    wls12342004(青青子木)是对的,问题解决.
      

  14.   

    receiveMessage[k].Equals("故障")
    -------------
    "故障".Equals(receiveMessage[k])这样就不会报错了
      

  15.   

    socket通信时,发送和接收使用什么编码?有的用utf-8,有的用uincode,还有的用default.default是什么编码?
    问题起源是在socket通信中,我在客户端要读一个文本文件,再将文本文件的内容发送到服务器端.文本文件保存用什么编码?编码与socket通信的编码不一致时要出错呀!