(C#) Hogyan lehet ezt megcsinálni referencia típusoknál?
Van egy referencia típusom (konkrétan List-em), és létezik két referenciám (OPT és E néven). Szeretném egy feladatban megtalálni az optimális megoldást úgy, hogy minden kombinációt végigpörgetek, majd megnézem, hogy jobb-e mint az eddigi legjobb (kb. mint a maximumkiválasztásnál). Ha találok egy jobbat, akkor azt elmentem az OPT nevű List-be. Ezután nézném a többi megoldást, tehát az E változik. De ekkor az OPT is változik, mivel ugyanoda mutat, ahova az E. Hogyan lehetne ezt kiküszöbölni? Tehát hogy az OPT ne változzon az E változásával.
Remélem érthetően magyaráztam el (elég késő/korán van már). Köszönöm a válaszokat!
Tehát valami olyasmit akarsz, hogy van egy valtozod (E), amiben objektum van, es van egy ilyen típusú listád (L). Egy cikusban végigmész valami elemeken, a jelenlegi elemet az E-ben tárolod, és attól félsz, ha felülírod az E-t, akkor a listában is az összes elem E lesz a legvégén?
Amikor a listához hozzáadsz, akkor a referenciát adod át, nem magát a változót. Utána azt nyugodtan felülírhatod.
A probléma az, hogy amikor eljut odáig a kód, hogy "OPT=E", akkor a háttérben az történik, hogy az 'OPT' ugyanarra a memóriaterületre fog mutatni, mint az 'E', tehát nem átmásolódnak az értékei az 'OPT'-ba. Ami azért baj, mert az 'E'-vel tovább számol a gép, az 'E' folyamatosan változik (illetve az a memóriaterület ahova mutat), de ekkor az 'OPT' is változik, hisz ugyanoda mutat az is.
Sikerült megoldanom egyébként, "OPT=E" helyett "E.CopyTo(OPT)" írva megoldotta a problémát. (ekkor a háttérben új memóriaterület foglalódik le, tehát csinál egy 'new List<T>();'-et, és ebbe másolja át az E-ben tárolt adatokat szépen egyesével)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!