Tôi đang sử dụng sau đây ngay bây giờ:Sử dụng biến ở vị trí của tên hàm
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;
}
}
Nó hoạt động, nhưng nó cảm thấy kinda sai. Cách Python sẽ giống như thế này:
foreach string file in files:
filetype.Value(file)
Tôi thực sự khó tưởng tượng rằng C# không thể làm điều gì đó như thế này. Nó có thể là kỹ năng của Google của tôi là xấu, nhưng tôi không thể hình dung nó ra.
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);
}
}
tôi xin lỗi nhưng tôi không thể tìm ra loại tệp là gì? –
Cân nhắc tạo các giá trị chuyển đổi enum thay vì chuỗi. Không phải là một giải pháp cho vấn đề của bạn mà là một thực hành tốt để đảm bảo bạn nắm bắt được thời gian biên dịch lỗi. – Stilgar
Hiển thị cho chúng tôi cách bạn có được/xây dựng '' fileType''s. Có thể một sự thay đổi nhỏ ở đó (cung cấp một đại biểu thay vì chuỗi) làm cho nó dễ dàng biến mất. –