使用可变我现在使用如下:代替函数名
foreach (string file in files) {
switch (filetype.Value) {
case "ReadFile":
ReadFile(file);
break;
case "ReadMSOfficeWordFile":
ReadMSOfficeWordFile(file);
break;
case "ReadMSOfficeExcelFile":
ReadMSOfficeExcelFile(file);
break;
case "ReadPDFFile":
ReadPDFFile(file);
break;
}
}
它的工作原理,但感觉有点不对。 Python的方式会更像这样:
foreach string file in files:
filetype.Value(file)
我真的很难想象C#不能做这样的事情。这可能是因为我的Google技能不好,但我似乎无法弄清楚。
SOLUTION
public static readonly IDictionary<string, Action<string>> FileTypesDict = new Dictionary<string,Action<string>> {
{"*.txt", ReadFile},
{"*.doc", ReadMSOfficeWordFile},
{"*.docx", ReadMSOfficeWordFile},
{"*.xls", ReadMSOfficeExcelFile},
{"*.xlsx", ReadMSOfficeExcelFile},
{"*.pdf", ReadPDFFile},
};
foreach (KeyValuePair<string, Action<string>> filetype in FileTypesDict) {
string[] files = Directory.GetFiles(FilePath, filetype.Key, SearchOption.AllDirectories);
//System.Reflection.MethodInfo ReadFileMethod = ReadFile.GetType().GetMethod(filetype.Value);
foreach (string file in files) {
FileTypesDict[filetype.Key](file);
}
}
我很抱歉,但我无法弄清楚什么是文件类型? – 2012-03-06 15:09:15
考虑让开关值枚举而不是字符串。不是你的问题的解决方案,但一个很好的做法,以确保你编译错误的时间。 – Stilgar 2012-03-06 15:12:06
向我们展示您获取/构造''fileType's的方式。可能在那里做一个小改动(提供一个委托而不是字符串)使得它很容易消失。 – 2012-03-06 15:30:07