2013-03-20 82 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

相關問題