En general se puede utilizar el (posiblemente con mal olor) proyectada por ejemplo truco que otros han mencionado para crear instancias de cualquier tipo genérico parametrizado con un tipo anónimo para el argumento de tipo. Sin embargo, para List<T>
hay una manera un poco menos bruto para hacerlo:
var array = new[] {
new {
Name="Krishna",
Phones = new[] {"555-555-5555", "666-666-6666"}
}
};
var list = array.ToList();
Su esbozo de una sintaxis propuesta es similar a una característica que no implementaron para C# 3 o 4, pero hemos considerado. Llamamos a la función de "tipos" Mumble, y sería algo parecido a esto:
List<?> myList = new List<?>() {
new {
Name="Krishna",
Phones = new[] {"555-555-5555", "666-666-6666"}
}
};
nos llaman "tipos mumble" porque por supuesto que lo había leído "miLista es una nueva lista de hrmmf". :-)
La idea es que el compilador revise los inicializadores y haga todo lo posible para descubrir cuál podría ser el tipo, de la misma manera que "var" significa "ver el inicializador y descubrir cuál es el tipo de la variable ". Si usamos "var" como el "murmullo" o "?" (que es similar a lo que hace Java en una función relacionada), o algo más es una pregunta abierta.
En cualquier caso, no aguantaría la respiración esperando esta función si fuera usted. Hasta ahora no ha alcanzado el límite para varias versiones de idiomas, pero creo que permanecerá en la lista de posibilidades durante un tiempo más. Si, hipotéticamente hablando, estuviéramos diseñando versiones futuras del lenguaje. Que podríamos o no ser. Recuerde, las reflexiones de Eric sobre las versiones futuras de C# son solo para fines de entretenimiento.
No entiendo cuál es el punto de una lista con tipos anónimos. –
Hay algunos casos de uso para ellos. Un ejemplo es cuando necesita mezclar una consulta LINQ-to-SQL con una colección respaldada por memoria. – Polynomial