Как связать два набора индексом в LINQ

Добавьте оператор declutter: true после каждого векторного слоя, он отлично работает.

23
задан Revious 24 January 2018 в 10:27
поделиться

3 ответа

.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. Я предполагаю, что это работает для вашего сценария, поэтому я оставлю это так.

27
ответ дан 29 November 2019 в 02:16
поделиться

Предположим, что оба массива имеют одинаковый размер:

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();
6
ответ дан 29 November 2019 в 02:16
поделиться
object[] objects = values.Select((s,i) => Convert.ChangeType(s, types[i]))
                         .ToArray();
4
ответ дан 29 November 2019 в 02:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: