如何在下拉框选择驱动器时避免使用if-else语句?
移除if-else简化驱动器对应CSV文件读取逻辑
核心思路是从输入的驱动器字符串里提取纯驱动器号,动态拼接CSV文件路径,不用逐个判断每个驱动器,同时把重复的读取CSV逻辑抽成独立方法,彻底摆脱繁琐的if-else。
步骤1:提取驱动器号并动态构建路径
从你的str(比如"(D:)")里去掉括号,拿到纯驱动器标识,直接拼接出CSV文件的完整路径:
// 提取驱动器号,比如从"(D:)"得到"D:" var driveLetter = str.Trim('(', ')'); // 动态构建CSV路径 var csvPath = $@"{driveLetter}\file1.CSV";
步骤2:把重复的读取逻辑抽成方法
把原来写在每个if-else块里的读取CSV、赋值UI、异常处理逻辑单独封装成方法,避免代码重复:
private void ReadAndLoadSettings(string csvPath) { try { using (var fs = File.Open(csvPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { var csvFileDescription = new CsvFileDescription { FirstLineHasColumnNames = true, IgnoreUnknownColumns = true, SeparatorChar = ',', UseFieldIndexForReadingData = false }; var csvContext = new LINQtoCSV.CsvContext(); var settings = csvContext.Read<Settings>(csvPath, csvFileDescription); // 取第一条数据(原代码循环赋值会导致最后一条覆盖前面的,按需调整) var firstSetting = settings.FirstOrDefault(); if (firstSetting != null) { tbx_ssid.Text = firstSetting.SSID; tbx_pass.Text = firstSetting.password; } else { tbx_ssid.Text = ""; tbx_pass.Text = ""; } if (string.IsNullOrEmpty(tbx_ssid.Text) && string.IsNullOrEmpty(tbx_pass.Text)) { MessageBox.Show("No data!"); } } } catch (FileNotFoundException) { MessageBox.Show("File not exists!"); } }
步骤3:最终简化后的调用代码
原来一堆if-else的地方,现在只需要几行代码:
var driveLetter = str.Trim('(', ')'); var csvPath = $@"{driveLetter}\file1.CSV"; ReadAndLoadSettings(csvPath);
额外修正点
- 原代码里有拼写错误:
csvPot应为csvPath,exsists改为exists,重构代码已修正。 - 原foreach循环会将所有setting的内容重复赋值到文本框,最终只保留最后一条数据的内容,改用
FirstOrDefault()更贴合常规需求,若需处理多条数据可再调整逻辑。
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

