2013-03-20 2 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» одинаковы. См. «[Что такое исключение NullReferenceException в .NET?] (Http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net)» для некоторых советов. –

+1

Единственное в этом фрагменте кода, которое может вызвать 'NullReferenceException', это' clientSocket', являющееся нулевым. Вам нужно потратить некоторое время на изучение того, как отлаживать ваш код. –

ответ

3

Каждый раз, когда вы получаете такую ​​ошибку (NullReferenceException), в вашем коде есть что-то, что установлено null. Вы должны посмотреть на свой код и определить:

  1. На какой строке (в каком методе) возникает ошибка?
  2. Какие переменные на этой линии: ссылочные типы или типы значений с нулевым значением?
    Нормальные значения (например, struct или целые числа, поплавки, парные) не могут быть null.
  3. Из этих переменных, которые могут Возможно, be null?
  4. Где эти переменные, возможно, установлены на null?
    Например, аргумент метода, значение, возвращаемое из метода, или результат оператора as может привести к тому, что переменная имеет значение null.

Если это не так, вы можете иметь (хотя и маловероятный) метод, который выбрасывает это исключение. Методы базового класса .NET обычно не генерируют такое исключение, и если ваш код действительно бросает его, ваша трассировка стека должна довести вас до самого глубокого метода и строки, которая делает это.

+0

За исключением типов нулевых значений, которые, по-прежнему, являются значениями типов –

+1

@DavidL Nice catch. Нюкальные типы на самом деле являются типами _in-between_ ссылочных типов и типов значений, и я забыл о них. Например, вы можете ограничить общий тип 'class' для ссылочных типов или' struct' для типов значений _non-nullable_. Необязательные типы значений являются особыми. – Virtlink

+0

Я согласен с Virtlink, что типы значений довольно особенные. On * no other value type * вы можете получить «NullReferenceException» при использовании точечной нотации против вложенного в коробку представления этого типа значений. Это для меня довольно особенное. –