2013-03-20 52 views
-2

我收到一条错误消息,我不知道如何解决该问题。这是原来的代码我有:未设置为一个对象的一个​​实例未将对象引用设置为对象按钮按下事件的实例

private void SendMessage(Command cmd, EndPoint sendToEP) 
{ 
    try 
    { 
     //Create the message to send. 
     Data msgToSend = new Data(); 

     //msgToSend.strName = txtName.Text; //Name of the user. 
     msgToSend.cmdCommand = cmd;   //Message to send. 
     msgToSend.vocoder = vocoder;  //Vocoder to be used. 

     byte[] message = msgToSend.ToByte(); 

     //Send the message asynchronously. 
     clientSocket.BeginSendTo(message, 0, message.Length, SocketFlags.None, sendToEP, new AsyncCallback(OnSend), null); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message, "UniProject-SendMessage()", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
} 

该错误消息是(按钮按下事件)

对象引用。

为什么我得到这个错误信息,我该如何解决它?

+4

几乎所有的'NullReferenceException'都是一样的。请参阅“[什么是.NET一个NullReferenceException?](http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net)”获得一些提示。 – 2013-03-20 01:54:54

+1

该代码片段中可能导致'NullReferenceException'的唯一情况是'clientSocket'为null。你需要花一些时间学习如何调试你的代码。 – 2013-03-20 03:06:07

回答

3

每当您发生此类错误(a NullReferenceException)时,您的代码中都有一些设置为null的内容。您必须查看您的代码并确定:

  1. 在哪一行(在哪个方法中)发生错误?
  2. 该行的哪些变量是参考类型可为空的值类型
    正常值类型(例如struct或整数,浮点数,双精度)不能是null
  3. 这些变量中,哪些可能会可能null
  4. 那些变量可能设置为null
    例如,方法参数,从方法返回的值或运算符的结果可能会导致变量为null

如果没有这种情况,您可能有(尽管不太可能)抛出此异常的方法。 .NET基类方法通常不会抛出这样的异常,如果你的代码抛出它,你的堆栈跟踪应该带给你最深的方法和线。

+0

除了可以为空的值类型,当然仍然是值类型 – 2013-03-20 02:03:23

+1

@DavidL很好的捕获。可空类型实际上是_in-between_之间的引用类型和值类型,我忘了它们。例如,可以将泛型类型约束为引用类型的'class',或者_non-nullable_值类型的'struct'。可为空的值类型是特殊的。 – Virtlink 2013-03-20 02:17:27

+0

我同意Virtlink的价值观类型是非常特殊的。 On *没有其他值类型*,当使用点符号对该值类型的盒装表示时,您是否可以获得'NullReferenceException'。这对我来说很特别。 – 2013-03-20 02:44:45

相关问题