什么是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]);
}
答案 0 :(得分:27)
.NET 4有一个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)=&gt; ...)因为.Select会在你的集合没有相同数量的元素时抛出异常,而.Zip会简单拉链尽可能多的元素。
如果您使用的是.NET 3.5,那么您将不得不接受。选择,或编写自己的.Zip方法。
现在,所有这一切,我从未使用过Convert.ChangeType。我假设它适用于你的场景,所以我会留下它。
答案 1 :(得分:6)
假设两个阵列的大小相同:
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();
答案 2 :(得分:4)
object[] objects = values.Select((s,i) => Convert.ChangeType(s, types[i]))
.ToArray();