使用 LinQ 合并 2 不同类型的列表

2024-01-11

我有 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);

但是,我怎样才能获得(quickly)如果我有一个类似的结果List<string>, one List<int>

List<string> myCars = new List<String> { "Yugo", "Aztec", "BMW" };
List<int> modeList = new List<int> { 1, 2, 3 };

首先,你应该注意的是Enumerable.Concat是一个扩展方法IEnumerable<T> and List<T>实现了这个接口。因此,您不需要为此使用 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> is 协变 https://msdn.microsoft.com/en-us/library/ee207183.aspx:

IEnumerable<object> all = ((IEnumerable<object>)myCars).Concat(modeList.Cast<object>());

上述解决方案的主要缺点是,在极少数情况下,您需要将引用存储为object,因为如果您想访问它们的成员(即方法、属性...),您将强制代码稍后再次将它们向下转换为实际类型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 LinQ 合并 2 不同类型的列表 的相关文章

随机推荐