T D*_*yen 2 c# linq string int list
我有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);
Run Code Online (Sandbox Code Playgroud)
但是,如果我有一个,我怎么能(快速)获得相似的结果List<string>List<int>
List<string> myCars = new List<String> { "Yugo", "Aztec", "BMW" };
List<int> modeList = new List<int> { 1, 2, 3 };
Run Code Online (Sandbox Code Playgroud)
由于List期望强类型数据类型,因此必须让其中一种数据类型。并且在string和之间int,int始终可以表示为string但并非所有string都可以表示为int(仅限特定范围内的数字类型)。因此,int数据类型应该让步。
然后您可以使用ToString()将int数据类型更改为string并将其与原始List.
List<string> myCars = new List<String> { "Yugo", "Aztec", "BMW" };
List<int> modeList = new List<int> { 1, 2, 3 };
var carConcat = myCars.Concat(from c2 in modeList select c2.ToString());
Run Code Online (Sandbox Code Playgroud)
或者,您可以创建List<object>包含所有数据类型的内容。
编辑:
请注意,您还可以删除身份 select (from c in myCars select c),归功于Aron 的 comment。
首先,您应该注意到这Enumerable.Concat是一个扩展方法IEnumerable<T>并List<T>实现此接口.因此,您不需要使用LINQ语法:
// When both lists are of string...
IEnumerable<string> all = myCars.Concat(modeList);
Run Code Online (Sandbox Code Playgroud)
另一方面,如果你想混合两个列表,但其中一个列表具有不同的泛型类型,那么,你仍然可以将它们混合在一起,将所有项目转换为object:
IEnumerable<object> all = myCars.Cast<object>().Concat(modeList.Cast<object>());
Run Code Online (Sandbox Code Playgroud)
......或者因为IEnumerable<T>是协变的:
IEnumerable<object> all = ((IEnumerable<object>)myCars).Concat(modeList.Cast<object>());
Run Code Online (Sandbox Code Playgroud)
上述解决方案的主要缺点是,您需要存储引用的极少数情况object,因为如果您想要访问其成员(例如,如果您想要访问其成员),则强制您的代码稍后再将它们向下转换为实际类型(即方法,属性......).