Ik'heb veel mensen de volgende code zien gebruiken:
Type t = typeof(obj1);
if (t == typeof(int))
// Some code here
Maar ik weet dat je dit ook kunt doen:
if (obj1.GetType() == typeof(int))
// Some code here
Of dit:
if (obj1 is int)
// Some code here
Persoonlijk heb ik het gevoel dat de laatste de schoonste is, maar is er iets dat ik over het hoofd zie? Welke is het beste om te gebruiken, of is het persoonlijke voorkeur?
Gebruik typeof
als je het type wilt ophalen in compilatie tijd. Gebruik GetType
als je het type wilt ophalen bij uitvoeringstijd. Er zijn zelden gevallen om is
te gebruiken, omdat het een casting doet en, in de meeste gevallen, je uiteindelijk toch de variabele cast.
Er is een vierde optie die je nog niet hebt overwogen (vooral als je een object ook gaat casten naar het type dat je vindt); dat is om as
te gebruiken.
Foo foo = obj as Foo;
if (foo != null)
// your code here
Dit gebruikt maar één cast terwijl deze aanpak:
if (obj is Foo)
Foo foo = (Foo)obj;
twee nodig heeft.
Het hangt af van wat ik aan het doen ben. Als ik een bool waarde nodig heb (zeg, om te bepalen of ik naar een int cast), dan gebruik ik is
. Als ik het type om een of andere reden echt nodig heb (bijvoorbeeld om aan een andere methode door te geven), gebruik ik GetType()
.