He visto que mucha gente utiliza el siguiente código:
Type t = typeof(obj1);
if (t == typeof(int))
// Some code here
Pero sé que también se puede hacer esto:
if (obj1.GetType() == typeof(int))
// Some code here
O esto:
if (obj1 is int)
// Some code here
Personalmente, creo que el último es el más limpio, pero ¿hay algo que se me escapa? ¿Cuál es el mejor para usar, o es una preferencia personal?
Utilice typeof
cuando quiera obtener el tipo en tiempo de compilación. Usa GetType
cuando quieras obtener el tipo en tiempo de ejecución. Rara vez hay casos para usar is
ya que hace un casting y, en la mayoría de los casos, se termina haciendo un casting de la variable de todos modos.
Hay una cuarta opción que no has considerado (especialmente si vas a castear un objeto al tipo que encuentres también); es usar as
.
Foo foo = obj as Foo;
if (foo != null)
// your code here
Esto sólo utiliza un cast mientras que este enfoque:
if (obj is Foo)
Foo foo = (Foo)obj;
requiere dos.
Depende de lo que esté haciendo. Si necesito un valor bool (por ejemplo, para determinar si voy a convertirlo en un int), usaré is
. Si realmente necesito el tipo por alguna razón (digamos, para pasarlo a algún otro método) usaré GetType()
.