Вернуть анонимный тип в Func
Есть метод, загружающий все внедренные ресурсы из библиотеки по указанному пути.
public static async Task<IEnumerable<(string filePath, string content)>> LoadResourcesAsync(Assembly assembly, string path)
{
string assemblyName = assembly.GetName().Name;
var files = assembly.GetManifestResourceNames().Where(x => x.StartsWith($"{assemblyName}.{path}"));
List<(string filePath, string content)> result = new();
foreach (var file in files)
{
using Stream stream = assembly.GetManifestResourceStream(file);
using StreamReader reader = new(stream);
string content = await reader.ReadToEndAsync();
result.Add(new(file, content));
}
return result;
}
Для интереса попробовал переписать foreach на select, но не смог. Код выглядит ужасно и сложно, но что я делаю не так?
return files.Select(async (string x, (string filePath, string content)) =>
{
using Stream stream = assembly.GetManifestResourceStream(x);
using StreamReader reader = new(stream);
string content = await reader.ReadToEndAsync();
return (x, content);
});
Ответы (1 шт):
Автор решения: Lapish
→ Ссылка
Верный вариант (EvgeniyZ):
return await Task.WhenAll(files.Select(async x =>
{
using Stream stream = assembly.GetManifestResourceStream(x);
using StreamReader reader = new(stream);
string content = await reader.ReadToEndAsync();
return (x, content);
}));