En algunas ocasiones distintas, he tratado de extraer el tipo declarado de una variable, relativamente lejos de su declaración, solo para descubrir que typeof(T)
solo funciona con nombres de tipos.C# /. NET: ¿`typeof (variable)` es una función de idioma posible?
Me preguntaba si habría algún cambio de rotura para permitir typeof(variable)
también.
Por ejemplo, con este código:
class Animal { /* ... */ }
class Goat : Animal { /* ... */ }
/* ... */
var g = new Goat();
Animal a = g;
Console.WriteLine(typeof(Goat));
Console.WriteLine(typeof(Animal));
Console.WriteLine(g.GetType());
Console.WriteLine(a.GetType());
se obtiene algo así como:
cabra
Animal
cabra
cabra
por qué no es posible para hacer esto:
Console.WriteLine(typeof(g));
Console.WriteLine(typeof(a));
cabra
Animal
he dado la especificación de una mirada superficial, y no puedo encontrar ningún conflicto. Creo que aclararía la pregunta '¿Por qué este tipo?' cuando se usa el operador typeof
.
Sé que el compilador es capaz, aquí. Una aplicación utilizando métodos de extensión es realmente trivial:
public static Type TypeOf<T>(this T variable)
{
return typeof(T);
}
Pero que se siente sucio, abusando del tipo de inferencia del compilador.
¿Cómo desea utilizar este? ¿Y por qué no se puede hacer usando 'is'? –
Primero, ¿tienes algo en contra de GetType()? En segundo lugar, su comportamiento de ejemplo de typeof (g) y typeof (a) es incorrecto. El tipo subyacente de a es, de hecho, Cabra (no Animal). –
@ 0xA3: Me encuentro usando 'typeof' para reflexión e interoperabilidad. 'is' no te da acceso a todo eso. –