(C#) Miért lett letiltva a klasszikus kasztolás, míg az as kulcsszóval való nem?
Szóval alapvetően ismerem felületesen a kettő között a különbséget: az as-nál csak azt hajtod végre, hogy megpróbálod a kasztolást, még a klasszikusnál mindenképpen kasztolni akarsz. Viszont azt hittem, hogy ez teljes mértékben a programozó kezében van, hogy mit mikor használ, maximum kap egy exceptiont. Nekem viszont a Visual Studio teljesen aláhúzta a klasszikus kasztolást, egyedül az as-t engedte, pedig a kód azon állapotában biztos lett volna, hogy sikeres a kasztolás. Ha nem ismerem az as kulcsszót, akkor nem tudtam volna továbblépni.
Egy nem erre vonatkozó hibaüzenet ír ki a CS1061-et, szóval nem kaptam választ, hogy mikor engedi mindkettőt.
Szerintem hagyd inkább ezt az őskövület nyelvet, használd inkább JS-t, biztos találsz ép megoldást rá. Ne foglalkozz vele inkább, kifutóban van.
Üdv!
(egy mérnök)
'type' does not contain a definition for 'name' and no accessible extension method 'name' accepting a first argument of type 'type' could be found (are you missing a using directive or an assembly reference?).
This error occurs when you try to call a method or access a class member that does not exist.
Szóval, értelmezzük.
Egy olyan típust/osztályt/objektumot használsz, amely nem tartalmaz valamilyen metódust/függvényt vagy valamilyen osztálytagot/változót. Ennek nincs köze a castoláshoz, valószínűleg nem is a castolás miatt kapod, hanem miután castolod valami mássá az objektumod, akkor abban az állapotában már nem tartalmazza azt a dolgot, amihez hozzá akarsz férni.
De nagyon sokat segítene, ha megosztanád a kódod egy kódmegosztón (google: codeshare sites).
A #2-vel ne foglalkozz, szerinte az emberek azért éheznek a világ más tájain, mert nem keresnek eleget, a programozók közül pedig mindenki buta, aki mást állít, mint amiben ő hisz.
#3 Közben addig kísérleteztem, míg rájöttem, hogy mi a hiba. Szintaktikai hibát vétettem, csak ugye a hibaüzenet nem ebben segített.
Az as-os verzió, ami eredetileg is jó volt:
(Objektum as Típus).Property
Hagyományos kasztolás, ahogy rossz volt, és feldobta a CS1061-et:
(Típus)Objektum.Property
Ahogy megjavult:
((Típus).Objektum).Property
Segített az, a Property t próbáltad castolni, nem magát az Objektumot, a hibaüzenet jelzi hogy ez nem fog menni. Ugyanez a logika as operátorral nem úgy nézett volna ki ahogy fentebb írtad, hanem így
Objektum.Property as Típus
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, 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!