C# 如何在LINQ中通过索引连接两个集合

C# 如何在LINQ中通过索引连接两个集合,c#,linq,collections,join,C#,Linq,Collections,Join,LINQ等价于以下代码是什么 string[] values = { "1", "hello", "true" }; Type[] types = { typeof(int), typeof(string), typeof(bool) }; object[] objects = new object[values.Length]; for (int i = 0; i < values.Length; i++) { objects[i] = Convert.ChangeType(

LINQ等价于以下代码是什么

string[] values = { "1", "hello", "true" };
Type[] types = { typeof(int), typeof(string), typeof(bool) };

object[] objects = new object[values.Length];

for (int i = 0; i < values.Length; i++)
{
    objects[i] = Convert.ChangeType(values[i], types[i]);
}
string[]值={“1”、“hello”、“true”};
Type[]types={typeof(int)、typeof(string)、typeof(bool)};
object[]objects=新对象[values.Length];
for(int i=0;i
假设两个阵列的大小相同:

string[] values = { "1", "hello", "true" };
Type[] types = { typeof(int), typeof(string), typeof(bool) };

object[] objects = values
    .Select((value, index) => Convert.ChangeType(value, types[index]))
    .ToArray();

.NET4有一个Zip操作符,允许您将两个集合连接在一起

var values = { "1", "hello", "true" };
var types = { typeof(int), typeof(string), typeof(bool) };
var objects = values.Zip(types, (val, type) => Convert.ChangeType(val, type));
.Zip方法优于.Select((s,i)=>…),因为当集合的元素数不相同时,.Select将引发异常,而.Zip将尽可能多地压缩元素

如果您使用的是.NET3.5,那么您必须满足于.Select,或者编写自己的.Zip方法


尽管如此,我从未使用过Convert.ChangeType。我假设它适用于您的场景,所以我将保留它。

或者简单地说:
var objects=values.zip(types,(v,t)=>Convert.ChangeType(v,t))
object[] objects = values.Select((s,i) => Convert.ChangeType(s, types[i]))
                         .ToArray();