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?
Naudokite typeof
, kai norite gauti tipą kompiliavimo metu. Naudokite GetType
, kai norite gauti tipą vykdymo metu. Retai pasitaiko atvejų, kai reikia naudoti is
, 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
.
Foo foo = obj as Foo;
if (foo != null)
// your code here
Naudojamas tik vienas kastas, o šis metodas:
if (obj is Foo)
Foo foo = (Foo)obj;
reikia dviejų metimų.
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), naudosiu GetType()
.