x.GetType()
es una llamada a un método, evaluada en tiempo de ejecución. Por lo tanto, no se puede utilizar para un concepto en tiempo de compilación como el tipo de una variable. Estoy de acuerdo en que ocasionalmente sería muy útil poder hacer algo similar (especificando el tipo de tiempo de compilación de una variable como un argumento de tipo en otro lugar), pero actualmente no se puede. No puedo decir que regularmente lo extraño.
Sin embargo, usted puede hacer:
var x = new { a = "foobar", b = 42 };
var y = new[] { x };
var z = y.ToList();
También podría escribir un método de extensión simple de crear una lista genérica:
public static List<T> InList<T>(this T item)
{
return new List<T> { item };
}
(escoger un nombre diferente si usted quiere :)
continuación:
var x = new { a = "foobar", b = 42 };
var y = x.InList();
Como Marc muestra, en realidad no tiene que ser un método de extensión en absoluto. Lo único importante es que el compilador puede usar la inferencia de tipo para calcular el parámetro de tipo para el método, de modo que no tenga que intentar nombrar el tipo anónimo.
Las variables locales implícitamente tipadas son útiles por una variedad de razones, pero son particularmente útiles en LINQ para que pueda crear una proyección ad-hoc sin crear un tipo completamente nuevo explícitamente.
usted puede hacerlo, pero se necesita la reflexión . No puedo recordar el código exacto en la parte superior de mi cabeza, pero estoy seguro de que alguien publicará algo pronto. –
Si necesita saber el tipo de objeto, ¿por qué debería crearlo de forma anónima? Los usa cuando el tipo no importa o necesita ser conocido. –