有点不确定如何做到这一点。我需要以不同于文件服务器上显示的顺序显示文件列表。
我在想一种方法是根据匹配的枚举的名称值对字符串列表进行排序。
假设我有一个完整的字符串列表:
List<string> filenames = new List<string>();
我有一个相关的枚举以特定的顺序显示文件:
public enum ProcessWorkFlowOrder
{
File1,
File3,
File2
}
列表中的"文件名"字符串值将与枚举的名称完全匹配。
根据匹配的枚举值匹配和排序FileNames列表的最佳方式是什么?
如果文件名完全匹配,我不会使用枚举,而是使用另一个保序列表。
List<string> namesInOrder = ...
List<string> files = ...
var orderedFiles = from name in namesInOrder
join file in files
on name equals file
select file;
Join
保留了第一个序列的顺序,因此允许您使用它来排序第二个序列。
如果您已经有了枚举,并且不能像Anthony建议的那样将其更改为字符串列表,则可以使用以下方法:
var order = Enum.GetValues(typeof(ProcessWorkFlowOrder))
.OfType<ProcessWorkFlowOrder>()
.Select(x => new {
name = x.ToString(),
value = (int)x
});
var orderedFiles = from o in order
join f in filenames
on o.name equals f
orderby o.value
select f;
怎么样?
var orderedFilenames = filenames.OrderBy(
f => (int)Enum.Parse(typeof(ProcessWorkFlowOrder), f));
然而,我不确定维护这个枚举是否是最好的方法,最好写一个函数来定义顺序算法,如果枚举不包含文件名怎么办。
使用TryParse 编辑
var orderedFilenames = filenames.OrderBy(f => {
ProcessWorkFlowOrder parsed;
int result = 0;
if (Enum.TryParse<ProcessWorkFlowOrder>(f, out parsed))
result = (int)parsed;
return result;
});
你会使用什么规则来构造枚举或顺序保持列表,或者顺序是否纯粹是任意的?