开发者

How to concatenate two collections by index in LINQ

开发者 https://www.devze.com 2022-12-20 09:03 出处:网络
What could be a LINQ equivalent to the following code? string[] values = { \"1\", \"hello\", \"true\" };

What could be a LINQ equivalent to the following code?

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++)
{
开发者_如何学JAVA    objects[i] = Convert.ChangeType(values[i], types[i]);
}


.NET 4 has a Zip operator that lets you join two collections together.

var values = { "1", "hello", "true" };
var types = { typeof(int), typeof(string), typeof(bool) };
var objects = values.Zip(types, (val, type) => Convert.ChangeType(val, type));

The .Zip method is superior to .Select((s, i) => ...) because .Select will throw an exception when your collections don't have the same number of elements, whereas .Zip will simply zip together as many elements as it can.

If you're on .NET 3.5, then you'll have to settle for .Select, or write your own .Zip method.

Now, all that said, I've never used Convert.ChangeType. I'm assuming it works for your scenario, so I'll leave that be.


Assuming both arrays have the same size:

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();


object[] objects = values.Select((s,i) => Convert.ChangeType(s, types[i]))
                         .ToArray();
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号