Вытащить из списка каждый путь каждого файла в одну строку

Можно ли сделать так чтобы из списка выбрать определённый путь к нужному файлу 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 шт):

Автор решения: aepot
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, а все последующие разы будет переиспользоваться уже готовый.

→ Ссылка