我有 2 个列表。如果两者都是string
类型.我可以使用类似的东西合并它们:
List<string> myCars = new List<String> { "Yugo", "Aztec", "BMW" };
List<string> modeList = new List<String> { "BMW", "Saab", "Aztec" };
var carConcat = (from c in myCars select c)
.Concat(from c2 in modeList select c2);
但是,如果我有一个 List<string>
,我怎样才能(快速)获得类似的结果? , 一个 List<int>
List<string> myCars = new List<String> { "Yugo", "Aztec", "BMW" };
List<int> modeList = new List<int> { 1, 2, 3 };
最佳答案
首先,你应该注意到 Enumerable.Concat
是 IEnumerable<T>
的扩展方法和 List<T>
实现这个接口(interface)。因此,您不需要为此使用 LINQ 语法:
// When both lists are of string...
IEnumerable<string> all = myCars.Concat(modeList);
另一方面,如果您想混合使用两个列表,但其中一个具有不同的泛型类型,那么您仍然可以混合使用它们,将所有项目转换为 object
。 :
IEnumerable<object> all = myCars.Cast<object>().Concat(modeList.Cast<object>());
...或自 IEnumerable<T>
是covariant :
IEnumerable<object> all = ((IEnumerable<object>)myCars).Concat(modeList.Cast<object>());
上述解决方案的主要缺点是,在极少数极端情况下,您会希望将引用存储为 object
,因为如果您想访问它们的成员(即方法、属性...),您将强制您的代码稍后再次将它们向下转换为实际类型。
关于c# - 使用 LinQ 合并 2 个不同类型的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36759593/