2009-06-23 3 views

ответ

8

Это наиболее распространенное исключение в .NET. Это просто означает, что вы пытаетесь вызвать член переменной, которая не инициализирована (null). Вы должны инициализировать эту переменную перед вызовом своих членов

+1

Обратите внимание, что эта рекомендация относится к «полям» (экземпляру/статическим переменным), но не к локальным переменным (для локальных переменных применяется определенное присваивание, вы даже не можете * пытаться использовать неинициализированную локальную переменную). –

14

Это означает, что вы пытались получить доступ к члену то, что не существует:

string s = null; 
int i = s.Length; // boom 

Просто исправить вещь, которая является нулевым. Либо сделайте его ненулевым, либо сначала выполните нулевой тест.

Существует также corner-case здесь связано с Nullable<T>, дженериков и new общего ограничения - немного вряд ли, хотя (но черт возьми, я попал этот вопрос!).

1

Это означает, что вы пытались использовать метод или свойство объекта, когда переменная еще не инициализирован:

string temp; 
int len = temp.Length; // throws NullReferenceException; temp is null 

string temp2 = "some string"; 
int len2 = temp2.Length; // this works well; temp is a string 
+0

Для локальных переменных (как показано в примере) он * инициализируется * (иначе он не будет компилироваться). Просто: оно инициализируется нулем. –

+1

if 'temp' - это локальная переменная, которую она не компилирует. Если это поле, оно будет нулевым. –

1

Код ниже покажет вам исключение, и ключ.

string s = null; 
s = s.ToUpper(); 
1

Где-то в вашем коде, у вас есть ссылка на объект, и это не указывает на экземпляр объекта :)

Где-то вы использовали объект без вызова его конструктора.

что вы должны сделать:

MyClass c = new MyClass(); 

что вы сделали:

MyClass c; 
c.Blah(); 
+1

Что не скомпилирует ... (определенное задание) –

+0

Вы правы, и у них тоже не будет моей реализации MyClass. Давайте сделаем Случайный r = null; r.Next(); вместо этого. –

2

Это означает, что вы ссылки то, что это null, например:

class Test 
{ 

    public object SomeProp 
    { 
     get; 
     set; 
    } 

} 

new Test().SomeProp.ToString() 

SomeProp будет недействительным и должен выбросить NullReferenceException. Обычно это связано с кодом, который вы вызываете, ожидая, что что-то будет, а это не так.

+0

Если 'o' - локальная переменная, это не будет компилироваться. Нераспределенные локальные переменные не являются «null». – CodesInChaos

+0

Вы правы. Изменился пример. – Lloyd

Смежные вопросы