【问题标题】:How to avoid if-else statements, when choosing drives in combobox?在组合框中选择驱动器时如何避免 if-else 语句?
【发布时间】:2023-01-30 21:00:34
【问题描述】:

我试图在我的函数中删除 if-else 语句,因此我不需要指定每个可能的驱动器。在这种情况下,我正在读取一个 .csv 文件。有什么办法可以避免 if-else 的挣扎。

提前致谢!

我现在的代码:

if (str == "(D:)")
{
    csvPath = @"D:\file1.CSV";

    try
    {
        using (var fs = File.Open(csvPot, 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>(csvPot, csvFileDescription);

            foreach (var setting in settings)
            {
                tbx_ssid.Text = setting.SSID;
                tbx_pass.Text = setting.password;
            }

            if (tbx_ssid.Text == "" && tbx_pass.Text == "")
            {
                MessageBox.Show("No data!");
            }
        }
    }
    catch (FileNotFoundException)
    {
        MessageBox.Show("File not exsists!");
    }
}
else if (str == "(E:)")
{
.
.
.

【问题讨论】:

  • 所以你基本上需要根据选择的驱动器更改文件路径?
  • csvPath = $@"${str}/file1.csv";
  • @steve 就像你说的!以及如何指定选择哪个驱动器...

标签: c# forms


【解决方案1】:

您可以准备一个 Dictionary<string, string> ,其中键是要使用的驱动器,值是检索文件的文件路径。

像这样的东西。

Dictionary<string, string> fileToUse = new Dictionary<string, string>();
fileToUse.Add("(D:)", @"D:ile1.CSV");
fileToUse.Add("(E:)", @"E:someotherfolderile1.CSV");

现在这只是一个问题

if (fileToUse.TryGetValue(str, out string file))
{
    // Code that uses _file_
    
}

【讨论】:

  • 我知道你的意思,但使用 fileToUse.add 并在其中指定所有可能的驱动器(D、E、F、G、H、I、J、K ...)是一种明智的方法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多