有点不确定如何做到这一点。我需要以与文件服务器上显示的顺序不同的顺序显示文件列表。
我在想一种方法是通过匹配的枚举名称值来排序字符串列表。
假设我有完整的字符串列表:
List<string> filenames = new List<string>();
我有一个相关的枚举以按特定顺序显示文件:
public enum ProcessWorkFlowOrder
{
File1,
File3,
File2
}
List中的“filenames”字符串值将与Enum的名称完全匹配。
通过匹配的枚举值匹配和排序FileNames列表的最佳方法是什么?
答案 0 :(得分:5)
如果文件名完全匹配,我不会使用枚举,而是使用另一个订单保留列表。
List<string> namesInOrder = ...
List<string> files = ...
var orderedFiles = from name in namesInOrder
join file in files
on name equals file
select file;
Join
保留第一个序列的顺序,因此允许您使用它来订购第二个序列。
答案 1 :(得分:3)
如果您已经拥有枚举,并且无法将其更改为像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;
答案 2 :(得分:1)
怎么样?
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;
});
您将使用哪些规则来构建枚举或订单保留列表,或者该命令是纯粹的仲裁?