使用可變我現在使用如下:代替函數名
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