Вытащить из списка каждый путь каждого файла в одну строку
Можно ли сделать так чтобы из списка выбрать определённый путь к нужному файлу List<string>?
public static List<string> GameFiles()
{
var retList = new List<string>();
retList.Add(Path.Combine(AppData, "Games", "Account Base"));
retList.Add(Path.Combine(LocalAppData, "Games", "Account Base"));
retList.Add(Path.Combine(AppData, "Games", "Connect"));
retList.Add(Path.Combine(LocalAppData, "Games", "Connect"));
return retList;
}
В цикле прохожусь по списку
foreach (string pair in GameFiles())
{
Console.WriteLine(pair); // Тут выводит все списки.
}
А мне нужно чтобы выводило так же как через foreach только в одну строку, такой способ возвращает только первые элементы из списка и дальше не идёт:
string Acc = GameFiles().First(x => Path.GetFileName(x) == "Account Base");
string Conn= GameFiles().First(x => Path.GetFileName(x) == "Connect");
Как сделать чтобы Acc возвращал список всех файлов с Account Base в одну строку? И аналогично с Conn Если это возможно конечно)
Ответы (1 шт):
string Acc = string.Join(" ", GameFiles().Where(x => Path.GetFileName(x) == "Account Base"));
Кстати, ваш метод получения списка выглядит странно. Странность заключается в том, что он пересоздает список каждый раз с нуля, когда вы к нему обращаетесь. Если вы создаете список каждый раз из одних и тех же данных, лучше его закешировать, а вместо метода вообще лучше использовать свойство.
А метод создания списка вынести отдельно.
private static List<string> _gameFiles;
public static List<string> GameFiles => _gameFiles ??= BuildGameFiles();
private static List<string> BuildGameFiles()
{
var retList = new List<string>();
retList.Add(Path.Combine(AppData, "Games", "Account Base"));
retList.Add(Path.Combine(LocalAppData, "Games", "Account Base"));
retList.Add(Path.Combine(AppData, "Games", "Connect"));
retList.Add(Path.Combine(LocalAppData, "Games", "Connect"));
return retList;
}
Тогда вышеупомянутая строка будет выглядеть так
string Acc = string.Join(" ", GameFiles.Where(x => Path.GetFileName(x) == "Account Base"));
Теперь список будет построен только когда вы впервые обратились к свойству GameFiles, а все последующие разы будет переиспользоваться уже готовый.