Daugiau
Tipo tikrinimas: typeof, GetType arba is?
Mačiau, kad daugelis žmonių naudoja tokį kodą:
Type t = typeof(obj1);
if (t == typeof(int))
// Some code here
Bet aš žinau, kad jūs taip pat galite padaryti taip:
if (obj1.GetType() == typeof(int))
// Some code here
Arba taip:
if (obj1 is int)
// Some code here
Asmeniškai man atrodo, kad pastarasis variantas yra švariausias, bet gal aš ko nors nepastebiu? Kurį iš jų geriausia naudoti, ar tai asmeninis pasirinkimas?
1426
3
Naudokite
typeof
, kai norite gauti tipą kompiliavimo metu. NaudokiteGetType
, kai norite gauti tipą vykdymo metu. Retai pasitaiko atvejų, kai reikia naudotiis
, nes jis atlieka kastavimą, o daugeliu atvejų kintamasis vis tiek bus kastruojamas.Yra ir ketvirta galimybė, kurios nesvarstėte (ypač jei ketinate objektą taip pat kastuoti į rastą tipą); tai yra naudoti
as
.Naudojamas tik vienas kastas, o šis metodas:
reikia dviejų metimų.
Manau, kad pastarasis taip pat atsižvelgia į paveldėjimą (pvz., Šuo yra Gyvūnas == true), kuris daugeliu atvejų yra geresnis.
Tai priklauso nuo to, ką darau. Jei man reikia bool reikšmės (tarkime, norint nustatyti, ar ją išverčiu į int), naudosiu
is
. Jei man iš tikrųjų reikia tipo dėl kokios nors priežasties (tarkime, norint perduoti kitam metodui), naudosiuGetType()
.