c# .net için iç içe nesne oluşturmak ve kullanmak

canliyacik (1) 8 yıl önce sordu

Aşağıdaki gibi bir nesne yazıyorum sonra bunu RootObject r1 = new RootObject() şeklinde create ediyorum.

r1.Boolean = true;  dediğimde sorun olmuyor ancak

r1.Boolean.data.a = "test" dediğim zaman NullReferenceException hatası veriyor.

Tamam anlıyorum Data nesnesini create etmeden içine değer atıyormuşum gibi oluyor ama bunlar iç içe nesneler. Çıkamadım işin içinden nası olcak bu iş

 

public class Datain
{
    public string d { get; set; }
    public string e { get; set; }
}

public class Data
{
    public string a { get; set; }
    public string c { get; set; }
    public Datain datain { get; set; }
}

public class RootObject
{
    public bool Boolean { get; set; }
    public int Number { get; set; }
    public Data data { get; set; }
}

Toplam 2 cevap


alattin (17127) 8 yıl önce cevapladı

Şue şekilde yapabilirsiniz:

  RootObject r1 = new RootObject{ data = new Data() };
  r1.Boolean = true;
  r1.data.a = "uzmanim.net";

Eğer bir nesne içindeki bir property yine nesneden oluşuyorsa, siz bu nesne içindeki herhangi bir property'e değer atamak istiyorsanız önce o nesneyi yaratmalısınız.

RootObject r1 = new RootObject{ data = new Data() };

Bu örnekte RootObject sınıfından(class) r1 adında bir nesne(object) türettim. Bu işlemi yaparken aynı zamanda data property'si için de Data class'ından yeni bir nesne türettim. 

Bu şekilde hata vermeyecektir.

canliyacik (1) 8 yıl önce cevapladı

Teşekkürler cevap için ancak bir sorunum daha var oda eğer nesneler aşağıdaki gibi olursa create etme işi nasıl olacak acaba

aynı mantıkla giderek şu şekilde create ettim ama hata veriyor

verdiği hata :Error    17    'System.Collections.Generic.List<Data>' does not contain a definition for 'Datain'

 

Result2 r2 = new Result2 { Data = new List<Data> { Datain = new List<Datain>() } };

 

public class Datain
{
    public string d { get; set; }
    public string e { get; set; }
}

public class Data
{
    public string a { get; set; }
    public string c { get; set; }
    public List<Datain> datain { get; set; }
}

public class RootObject
{
    public bool Boolean { get; set; }
    public int Number { get; set; }
    public List<Data> data { get; set; }
}