Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno C# - Jak číst ze struktury?

Mam vytvorenou strukturu s ruznymi daty. Tuto strukturu predavam "pouze kopiruji" do parametru ruznych metod, ktere volam... Nedavam tam zadne out ani ref, tak jak je mozne ze ty data se me stale meni? Jak tomu zabranit? Specha diky moc...

Předmět Autor Datum
Co kdybys tady pastnul ten kod co tam mas? Takhle se spatne radi...
MaSo 21.03.2007 16:01
MaSo
No mam to docela dlohy... ale tak aspon kousek... struct Stanice { public string[] stanice; public…
Jikra 21.03.2007 16:07
Jikra
:-[ Zas neumím číst, myslel jsem, že jde o C++. S C# nemám žádne zkušenosti, sorry. Ale i tak je dob…
MaSo 21.03.2007 16:11
MaSo
Hmm. No já si myslím, že to přece záleží na tom co máš vloženo v té tajemné části (tělo funkce), kte…
Flash_Gordon 21.03.2007 19:39
Flash_Gordon
Štruktúra sa síce posúva hodnotou (by value), ale keď obsahuje nejaký objekt, tak ten sa už nekopíru… poslední
los 21.03.2007 19:54
los

No mam to docela dlohy... ale tak aspon kousek...

struct Stanice
        {
            public string[] stanice;
            public int pocetStanic;
            public const int MaxStanic = 100;
        }
        struct Casy
        {
            public int pocetCasyVychoziStanice;
            public TimeSpan[,] casyVychoziStanice;
            public TimeSpan[] casMeziStanicema;
        }
static void NacteniStanic(out Stanice rad)
{ nejaky kod }
static void NacteniCasu(out Casy radCasy, Stanice radStanice)
{ nejaky kod }
static void TiskNaObrazovku(Stanice radStanice, Casy radCasy)
{nejaky kod}

A me jde o tu posledni metodu, ze mi to meni ty hodnoty, ktere jsem nacetl v metodach NacteniStanic() a NacteniCasu()...
        

Štruktúra sa síce posúva hodnotou (by value), ale keď obsahuje nejaký objekt, tak ten sa už nekopíruje - kopíruje sa len referencia na ten objekt. V tomto prípade je tým objektom pole - štruktúra obsahuje referenciu na pole, ktorá sa síce skopíruje, ale stále odkazuje na to isté pole.

Ako tomu zabrániť? Najjednoduchšie bude to pole v tých metódach nemeniť, keď ho ani meniť nechceš alebo pracovať nad kópiou toho poľa, ktorú si vytvoríš sám.

Nechápem, čo tie štruktúry reprezentujú a nepáčia sa mi. Štruktúra Stanice obsahuje pole staníc, počet staníc a maximálny počet staníc - pole má vlastnosť Length, takže na počet nepotrebuješ ďalšiu premennú. Namiesto celej tej štruktúry by som použil pole reťazcov, ale možno máš nejaký dôvod, prečo to máš takto. Celkovo by som uprednostnil triedy pred štruktúrami.

Zpět do poradny Odpovědět na původní otázku Nahoru