Ya lo he comentado, pero sigo pensando que es una opción válida, solo pruebe si en su entorno es mejor una solución u otra. En mi caso particular, el uso source.ForEach(p => dest.Add(p))
funciona mejor que el clásico, AddRange
pero no he investigado por qué en el nivel bajo.
Puede ver un código de ejemplo aquí: https://gist.github.com/mcliment/4690433
Entonces la opción sería:
var allProducts = new List<Product>(productCollection1.Count +
productCollection2.Count +
productCollection3.Count);
productCollection1.ForEach(p => allProducts.Add(p));
productCollection2.ForEach(p => allProducts.Add(p));
productCollection3.ForEach(p => allProducts.Add(p));
Pruébalo para ver si te funciona.
Descargo de responsabilidad : no estoy abogando por esta solución, encuentro Concat
la más clara. Simplemente dije, en mi discusión con Jon, que en mi máquina este caso funciona mejor que AddRange
, pero él dice, con mucho más conocimiento que yo, que esto no tiene sentido. Ahí está la esencia si quieres comparar.