c# - 使用 LinQ 合并 2 个不同类型的列表

标签 c# string linq list int

我有 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.ConcatIEnumerable<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/

相关文章:

r - R中大写和小写字符之间的字符串拆分?

javascript - 多行字符串的无效或意外标记

c# - 尝试在 formview 中绑定(bind)下拉列表时出现空引用异常

c# - 为什么我的鼠标光标不会移动到我告诉它与 Cursor.Position 一起去的地方?

c# - DateTime ToFileTime 和 ToFileTimeUtc 具有相同的输出

c# - 通过坐标计算二维形状的最小外接矩形

c# - Linq解析html字符串

c# - 如何使用 GetEnumerator() 实现 IEnumerable<T>?

c - 运行时检查失败 #2 - 变量 'start' 周围的堆栈已损坏

C# LINQ 顺序