Аргументы метода LINQ select

173
13 февраля 2019, 04:30

Не понимаю, почему так. Есть вызов асинхронного метода

tasks = request.Sets
                .Select(x => _service.MethodAsync(...))
                .ToArray();

Также приведу объявление вызываемой функции:

public async Task<IReadOnlyDictionary<long, TValue>> MethodAsync(...)

Как видно, она возвращает

Task<IReadOnlyDictionary<long, TValue>>

при этом, далее есть блок, в котором мы дожидаемся тред и здесь есть непонятная для меня вещь:

cache = (await Task.WhenAll(tasks))
                    .Select((x, i) => new KeyValuePair<int, IReadOnlyDictionary<long, TValue>>(request.Sets[i].Id, x))
                    .ToDictionary(x => x.Key, x => x.Value);

Rider подсказывает, что тип x -- IReadOnlyDictionary<long, TValue>>, а тип i -- int. Таким образом, мне непонятно, почему Select ожидает делегата с двумя аргументами, вместо делегата с одним аргументом типа IReadOnlyDictionary<long, TValue>>?

READ ALSO
DataRowExtensions.SetField vs индексатор

DataRowExtensions.SetField vs индексатор

Есть ли какая-то разница между присваиванием нового значение DataRow через DataRowExtensionsSetField и через индексатор по имени?

153
Как указывать action у вебформы в asp.net

Как указывать action у вебформы в asp.net

У меня возникла проблема с элементарной отправкой post запросаПока я гуглил, еще больше запутался

157
Как это можно оптимизировать?

Как это можно оптимизировать?

Как это можно оптимизировать и привести в нормальный вид?

179
Удалить неизвестные символы

Удалить неизвестные символы

Программа берет из реестра значение ключа, но в полученной строке есть неизвестные символы, которые мешают правильной обработки строкСама...

156