2016-05-21 3 views
0

Форум полон сообщений о проблемах, подобных этому. Я немного краснею, но не смог решить свою собственную проблему. я получаю сообщение об ошибке Exception:C# Ссылка на объект null, но не null

Object reference not set to an instance of an object.

 try 
     { 
      CZaposleni zap = new CZaposleni(); 
      zap.Sifra = "1234567894567"; 
      zap.Ime = "testIme"; 
      zap.Prezime = "testPrezime"; 
      zap.Pol = Char.Parse("M"); 
      zap.JMBG = "1234567899871"; 
      zap.Brknjizice = "12345"; 
      zap.SS = "4.test"; 
      zap.DatumR = DateTime.Parse("4/11/2013"); 
      zap.DatumZ = DateTime.Parse("4/11/2013"); 
      zap.Mestorodj = "testMesto"; 
      zap.Prebivaliste = "testPrebivaliste"; 
      zap.Kontakt1 = "654987"; 
      zap.Kontakt2 = "564845"; 
      CRadnaMesta rad = new CRadnaMesta(); 
      rad.ID = Int32.Parse(cbRadnaMesta.SelectedValue.ToString()); 
      Console.WriteLine("Zap = "+zap.ID +" Rad = "+rad.ID); 
      zap.Radnomesto = rad; 
      Console.WriteLine("Zap check 1: " + zap.ID + " " + zap.Radnomesto.ID); 
      zap.dodajRadnika(); 
      Console.WriteLine("Zap check 2: "+zap.ID+" "+zap.Radnomesto.ID); 

     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Frm: "+ex.Message); 
     } 

Кодекса перерывов в 'zap.Radnomesto = гт;' поскольку последний выход при запуске кода i get равен

rm.ID = 1
zap.ID = 0

Таким образом, ни один из двух объектов не имеет значения.

+6

Спрашивая об ошибке, ** всегда ** включает в себя полный трассировки стека ошибки. Если этот код действительно выбрасывает эту ошибку в строке, которую вы говорите, тогда «Radnomesto» является свойством * *, и ошибка возникает в пределах его сеттера. –

+0

Просим выслать минимальный код, необходимый для его воспроизведения. –

+1

Я подозреваю, что «Radnomesto» может быть собственностью с помощью «set» accessor, в котором возникает проблема. –

ответ

1

Я считаю, что ваша ошибка в CZaposleni класса в следующем коде:

public CRadnaMesta Radnomesto 
{ 
    get 
    { 
     return radnomesto; 
    } 
    set 
    { 
     if (radnomesto.ID == 0) 
      throw new Exception("Morate uneti radno mesto."); 
     radnomesto = value; 
    } 
} 

Точнее в if (radnomesto.ID == 0). Поскольку radnomesto имеет значение null, если не задано, вы получаете ошибку при проверке идентификатора.

Вы должны использовать следующий код вместо:

public CRadnaMesta Radnomesto 
{ 
    get 
    { 
     return radnomesto; 
    } 
    set 
    { 
     if (value == null || value.ID == 0) 
      throw new Exception("Morate uneti radno mesto."); 
     radnomesto = value; 
    } 
} 
+0

Теперь он ломается при броске Исключение каждый раз .. – Morsus

+0

В комментариях выше, ОП сказал, что сеттер выглядит так: 'public CRadnaMesta Radnomesto {set {if (radnomesto.ID == 0) throw new Exception (" Морат uneti radno Жижков. "); radnomesto = значение; }} 'Если этот код ломается с нулевым объектом, то он скорее всего означает, что radnomesto имеет значение null, и ваши изменения кода не будут исправлять это исключение, если это так. – jussij

+0

Но класс radnomesto (добавление/изменение/удаление/листинг) отлично работает ...:/ – Morsus

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