Sto utilizzando il seguente in questo momento:Usa variabili al posto del nome della funzione
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;
}
}
Funziona, ma ci si sente un pò male. Il modo in cui Python sarebbe qualcosa di più simile a questo:
foreach string file in files:
filetype.Value(file)
ho un momento davvero difficile immaginare che C# non può fare una cosa del genere. Può darsi che le mie competenze su Google siano cattive, ma non riesco a capirlo.
SOLUZIONE
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 mi dispiace ma non sono in grado di capire cosa sia il tipo di file? –
Considera di effettuare l'enum dei valori di commutazione anziché la stringa. Non è una soluzione al tuo problema, ma una buona pratica per assicurarti di raccogliere gli errori per compilare il tempo. – Stilgar
Mostraci il modo in cui ottieni/costruisci '' fileType''s. Forse un cambiamento minore lì (fornire un delegato invece di una stringa) fa andare via tutto facilmente. –