J'utilise ce qui suit en ce moment:variables Utilisation à la place du nom de la fonction
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;
}
}
Il fonctionne, mais il se sent un peu mal. La façon Python serait quelque chose comme ceci:
foreach string file in files:
filetype.Value(file)
J'ai vraiment du mal à imaginer que C# ne peut pas faire quelque chose comme ça. Il se peut que mes compétences Google soient mauvaises, mais je n'arrive pas à le comprendre.
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);
}
}
I suis désolé mais je ne suis pas capable de comprendre ce qui est filetype? –
Pensez à définir les valeurs de commutateur enum au lieu de chaîne. Pas une solution à votre problème, mais une bonne pratique pour vous assurer d'attraper les erreurs compiler le temps. – Stilgar
Montrez-nous comment vous obtenez/construisez '' fileType''. Peut-être un changement mineur là-bas (fournissant un délégué au lieu de chaîne) rend tout cela s'en aller facilement. –