我用下面的现在:
的foreach(在文件中字符串的文件){
开关(filetype.Value){
案的ReadFile:
ReadFile的(文件);
打破;
案ReadMSOfficeWordFile:
ReadMSOfficeWordFile(文件);
打破;
案ReadMSOfficeExcelFile:
ReadMSOfficeExcelFile(文件);
打破;
案ReadPDFFile:
ReadPDFFile(文件);
打破;
}
}
它的工作原理,但感觉有点不对。 Python的办法是更多的东西是这样的:
在文件 的foreach字符串的文件:
filetype.Value(文件)
我有一个很艰难的时期想象C#中不能做这样的事情。这可能是我的谷歌技能是不好的,但我似乎无法找到答案。
解决方案:
公共静态只读的IDictionary<字符串,动作<字符串>> FileTypesDict =新字典<字符串,动作<字符串>> {
{的* .txt,ReadFile的},
{的* .doc,ReadMSOfficeWordFile},
{* .DOCX,ReadMSOfficeWordFile},
{的* .xls,ReadMSOfficeExcelFile},
{*的.xlsx,ReadMSOfficeExcelFile},
{* .PDF,ReadPDFFile},
};
 
的foreach(KeyValuePair<字符串,动作<字符串>>文件类型在FileTypesDict){
字符串[]文件= Directory.GetFiles(文件路径,filetype.Key,SearchOption.AllDirectories);
//System.Reflection.MethodInfo ReadFileMethod = ReadFile.GetType()GetMethod的(filetype.Value)。
的foreach(在文件中字符串的文件){
FileTypesDict [filetype.Key](文件);
}
}
解决方案
您可以使用委托,像这样的一些preparation做到这一点:
私有静态只读的IDictionary<字符串,动作<字符串>> actionByType =
新的字典<字符串,动作<字符串>> {
{ReadFile的,ReadFile的}
,{ReadMSOfficeWordFile,ReadMSOfficeWordFile}
,{ReadMSOfficeExcelFile,ReadMSOfficeExcelFile}
,{ReadPDFFile,ReadPDFFile}
};
当是时候打电话给你的行动,做到这一点,如下所示:
actionByType [actionName](文件);
I'm using the following right now:
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;
}
}
It works, but it feels kinda wrong. The Python way would be something more like this:
foreach string file in files:
filetype.Value(file)
I have a really hard time imagining that C# can't do something like this. It may be that my Google skills are bad, but I can't seem to figure it out.
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);
}
}
解决方案
You can do it with some preparation using delegates, like this:
private static readonly IDictionary<string,Action<string>> actionByType =
new Dictionary<string,Action<string>> {
{"ReadFile", ReadFile}
, {"ReadMSOfficeWordFile", ReadMSOfficeWordFile}
, {"ReadMSOfficeExcelFile", ReadMSOfficeExcelFile}
, {"ReadPDFFile", ReadPDFFile}
};
When it is time to call your action, do it as follows:
actionByType[actionName](file);