.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) => ...), потому что.Select выбрасывает исключение, если в ваших коллекциях нет одинакового количества элементов, тогда как .Zip просто объединит столько элементов, сколько сможет.
Если вы используете .NET 3.5, то вы 'Я должен согласиться на .Select или написать свой собственный метод .Zip.
Теперь, после всего сказанного, я никогда не использовал Convert.ChangeType.Я предполагаю, что это работает для вашего сценария, поэтому я оставлю это так.