C#对象引用null但不为null

时间:2016-05-21 08:42:25

标签: c# class object reference null

该论坛充满了关于此类问题的帖子。我有点红,但没有设法解决我自己的问题。 我收到异常错误:

  

对象引用未设置为对象的实例。

        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 = rm;'自从上次输出运行代码后我得到的是

  

rm.ID = 1
  zap.ID = 0

所以两个对象都不是null。

1 个答案:

答案 0 :(得分: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为空,则在检查ID时会收到错误。

您应该使用以下代码:

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