Упорядочивание списка <String>по значению имени Enum - PullRequest
3 голосов
/ 24 мая 2011

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

Я подумал, что одним из способов будет упорядочить список строк по значению имени совпадающего перечисления.

Допустим, у меня есть полный список строк:

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

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

    public enum ProcessWorkFlowOrder 
    {    
       File1,
       File3,
       File2           
    }

Строковое значение «filenames» в списке будет точно соответствовать имени Enum.

Каков наилучший способ сопоставления и упорядочения списка FileNames по соответствующему значению enum?

Ответы [ 3 ]

5 голосов
/ 24 мая 2011

Если имена файлов совпадают точно, я бы не использовал enum, а скорее другой список, сохраняющий порядок.

List<string> namesInOrder = ...
List<string> files = ...

var orderedFiles = from name in namesInOrder
                   join file in files 
                   on name equals file
                   select file;

Join сохраняет порядок первой последовательности и, следовательно, позволит вам использовать его для порядка второй.

3 голосов
/ 24 мая 2011

Если у вас уже есть перечисление и вы не можете изменить его на список строк, как предлагает Энтони, вы можете использовать это:

1 голос
/ 24 мая 2011

как насчет?

var orderedFilenames = filenames.OrderBy(
    f => (int)Enum.Parse(typeof(ProcessWorkFlowOrder), f));

Однако я не уверен, что поддержание этого перечисления - лучший подход, лучше написать функцию для определения алгоритма порядка, что если enum не содержит файлname.

РЕДАКТИРОВАТЬ с TryParse

var orderedFilenames = filenames.OrderBy(f => {
       ProcessWorkFlowOrder parsed;
       int result = 0;
       if (Enum.TryParse<ProcessWorkFlowOrder>(f, out parsed))
           result = (int)parsed;
       return result;
    });

Какие правила вы бы использовали для создания перечисления или списка, сохраняющего порядок, или, если порядок чисто произвольный?*

...