динамическое форматирование строки с использованием string.format и List <T>.Count () - PullRequest
8 голосов
/ 08 июня 2009

Я должен распечатать несколько PDF-файлов для проекта на работе. Есть ли способ обеспечить динамическое заполнение, т.е. не использовать код, жестко запрограммированный в строке формата. Но вместо этого на основе счетчика списка.

Ex.

Если мой список состоит из 1000 элементов, я хочу получить следующее:

Part_0001_Filename.pdf ... Part_1000_Filename.pdf

И если мой список имеет длину, скажем, 500 элементов, я хочу иметь следующее форматирование:

Part_001_Filename.pdf ... Part_500_Filename.PDF

Причина в том, как Windows упорядочивает имена файлов. Он сортирует их по алфавиту слева направо или справа налево, поэтому я должен использовать начальный ноль, иначе порядок в папке будет испорчен.

1 Ответ

9 голосов
/ 08 июня 2009

Возможно, самый простой способ - динамически построить строку формата:

static List<string> FormatFileNames(List<string> files)
{
    int width = (files.Count+1).ToString("d").Length;

    string formatString = "Part_{0:D" + width + "}_{1}.pdf";

    List<string> result = new List<string>();

    for (int i=0; i < files.Count; i++)
    {
        result.Add(string.Format(formatString, i+1, files[i]));
    }
    return result;
}

Это можно сделать немного проще с LINQ, если вам нравится:

static List<string> FormatFileNames(List<string> files)
{
    int width = (files.Count+1).ToString("d").Length;        
    string formatString = "Part_{0:D" + width + "}_{1}.pdf";

    return files.Select((file, index) => 
                            string.Format(formatString, index+1, file))
                .ToList();
}
...