【问题标题】:C# Select a list relying on what user inputsC#根据用户输入选择一个列表
【发布时间】:2021-10-12 18:46:36
【问题描述】:

我遇到了一个让我发疯的问题。我声明我想避免使用 if 语句以使代码更智能、更简洁。我有一个包含 7 个项目的组合框,如果用户选择第一个项目,则程序对包含在类中的具有相同名称的特定列表执行某些操作,如果他选择第二个,则程序对包含在同一个列表中的另一个列表执行另一件事类。

代码是这样的:

        if (cbb1.SelectedItemPosition == 0)
        {
            lblResult.Text = DoSomething(ClassList.List1);
        }

        else if (cbb1.SelectedItemPosition == 1)
        {                
            lblResult.Text = DoSomething(ClassList.List2);
        }

现在我要添加另一个组合框,并结合所有可能的 if 语句,恕我直言,这将是困难和繁琐的。 所以我正在考虑使用元组将组合框 SelectedItemPosition 与列表名称相关联,让代码简单地像这样:

lblResult.Text = DoSomething(ComboboxItemConvertedToItsCorrespondingList);

也许比我想象的要容易,但我做不到。

对不起我的英语,谢谢大家。

编辑:字典效果很好。我删除了大约 30 行代码!谢谢大家

【问题讨论】:

  • 使用 Dictionary<int, List> 类型.. 或者您可以使用位置为数组索引的列表,因为您的项目位置是连续的并且从 0 开始。
  • 这应该会有所帮助:stackoverflow.com/questions/11784997/…
  • 你试过Dictionary<string, List<>>吗?您可以使用键加载ComboBox,然后从所选键中选择适当的列表。这将消除if 块并更具可扩展性。

标签: c#


【解决方案1】:

创建一个Dictionary<int, List<object> 并相应地将映射添加到它,并将键作为组合框项的索引。并且只将选定的索引传递给方法,并对最终是列表的字典值执行逻辑。

【讨论】:

    【解决方案2】:

    要用你的方法直接回答你的问题,你应该可以很容易地用一个列表来解决这个问题:

    其中List1ClassList.List1 的类型:

    List<List1> sublist = new List<List1>() {
        ClassList.List1,
        ClassList.List2,
    };
    // Other code
    lblResult.Text = DoSomething(subList[cbb1.SelectedItemPosition]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-23
      • 1970-01-01
      • 2020-02-15
      • 2022-06-30
      • 2014-05-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多