Pregunta

var x = new { a = "foobar", b = 42 };
List<x.GetType()> y;

¿Hay una manera diferente de hacer lo que yo quiero hacer aquí?

Si no hay, realmente no ver todo lo que tiene mucho sentido tipos implícitos ...

¿Fue útil?

Solución

x.GetType() es una llamada a un método, evaluada en tiempo de ejecución. Por lo tanto, no se puede utilizar durante un tiempo de compilación concepto como el tipo de una variable. Estoy de acuerdo que de vez en cuando sería muy práctico para poder hacer algo similar (especificando el tipo en tiempo de compilación de una variable como un argumento de tipo en otros lugares), pero en la actualidad no se puede. No puedo decir que echo de menos regularidad que aunque.

Sin embargo, puede do:

var x = new { a = "foobar", b = 42 };
var y = new[] { x };
var z = y.ToList();

También puede escribir un método simple extensión para crear una lista genérica:

public static List<T> InList<T>(this T item)
{
    return new List<T> { item };
}

(Elija un nombre diferente si lo desea:)

A continuación:

var x = new { a = "foobar", b = 42 };
var y = x.InList();

Como se muestra Marc, que en realidad no tiene por qué ser un método de extensión en absoluto. Lo único importante es que el compilador puede utilizar la inferencia de tipos para calcular el parámetro de tipo para el método de modo que usted no tiene que tratar de nombrar el tipo anónimo.

variables locales Implícitamente escritos son útiles para 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 de forma explícita.

Otros consejos

Hay muchas maneras de hacer esto con un método genérico:

public static List<T> CreateList<T>(T example) {
    return new List<T>();
}
...
var list = CreateList(x);

o mediante la creación de una lista por de datos y luego vaciarla ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top