2011-08-25 27 views
6

¿Es posible combinar dos listas que son de tipos diferentes?Concatenación de dos listas de diferentes tipos con LINQ

string[] left = { "A", "B", "C" }; 
int[] right = { 1, 2, 3 }; 
var result = left.Concat(right); 

El código anterior obciously tiene un tipo de error. Funciona si los tipos coinciden (por ejemplo, ambos son enteros o cadenas).

pom

+0

Me imagino que esto no es posible en general, pero para un escenario como el de su ejemplo, podría transformar fácilmente la lista int en una lista de cadenas y concatenarlas. – Icarus

+0

¿cuál es su resultado esperado (es decir, qué tipo es 'resultado')? –

Respuesta

14

Puedes boxearlo.

var result = left.Cast<object>().Concat(right.Cast<object>()); 

result habrá IEnumerable<object>.

Luego, para desempacarlo, puede usar OfType<T>().

var myStrings = result.OfType<string>(); 
var myInts = result.OfType<int>(); 
0

que pudieras jugar tanto a un tipo de base común (en este caso object), o se puede convertir los tipos de una de las listas para que puedas combinarlos, ya sea:

right.Select(i = i.ToString()) 

o

left.Select(s => int.Parse(s)) // Careful of exceptions here! 
0

única forma que conozco para hacer este trabajo sería:

var result = left.Concat(right.Select(i = i.ToString())); 
Cuestiones relacionadas