使用LINQ连接两个不同类型的列表

时间:2011-08-25 12:55:29

标签: c# linq

是否可以连接两个不同类型的列表?

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

上面的代码显然有一个类型错误。如果类型匹配(例如,两者都是整数或字符串),它就有效。

POM

3 个答案:

答案 0 :(得分:16)

你可以装箱。

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

result将为IEnumerable<object>

然后要将其取消包装,您可以使用OfType<T>()

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

答案 1 :(得分:0)

您可以将两者都转换为公共基类型(在本例中为object),或者您可以转换其中一个列表的类型,以便将它们组合起来:

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

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

答案 2 :(得分:0)

我所知道的唯一方法就是:

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