【问题标题】:C# Dynamic If arugmentC# 动态参数
【发布时间】:2016-10-20 04:40:14
【问题描述】:

在 C# 中构建 WPF 应用程序 I have 5 check boxes and when one or more is selected I want the argument of a it statement to change dynamically. 例如,我将 Mon、Tue、Wed、Thu 和 Fri 作为复选框。 如果用户选择 Mon、Wed 和 Fri,那么我希望 if 语句的参数改变以反映这一点。 我不想做出许多不同的 if 语句。 这是我写的一个示例,但是 if 语句显然是错误的

string passArg = "";

        if(check_mon.IsChecked == true)
        {
            passArg = "passArg == \"Mon\"";
        }

        if(passArg)
        {
            MessageBox.Show("RAN");
        }

对不起,这是一个愚蠢的问题

【问题讨论】:

  • 你想要一个 switch 语句吗?
  • 只有 5 个 if 语句就足够了。您使用 += 运算符构建字符串。比如passArg+="Thu"passArg+="Fri"
  • @M.kazemAkhgary 以及未选中时如何减去?你不能只是-= "unconcatenate" 字符串...
  • @Tinwor 您不能为现有类重载运算符。而且你不能从string 派生,因为它是密封的。
  • 对了,我要睡觉了。谢谢指正

标签: c# wpf visual-studio


【解决方案1】:

当复选框为 CheckedUnchecked 时,您可以触发事件,并且在此方法中您可以设置或取消设置您的内容。
例如在您的 xaml 表单中:

<CheckBox Checked="Checked" Unchecked="UnChecked"/>

然后创建事件:

private void UnChecked(object sender, RoutedEventArgs e) {
    //Checked, enable, disable or do whatever you want
}
private void Checked(object sender, RoutedEventArgs e) {
    //Checked, enable, disable or do whatever you want
}

【讨论】:

    【解决方案2】:

    您可以检查列表中的值:

    List<string> checked = new List<string>()
    
    if (check_mon.IsChecked)
    {
       checked.Add("Mon");
    }
    
    if (checked.Contains(passArg))
    {
       MessageBox.Show("RAN");
    }
    

    【讨论】:

      【解决方案3】:

      不像你想的那么简单。您可以动态地生成代码,但在这种情况下它是多余的。您只需要:

      bool isChecked = false;
      
      if(check_mon.IsChecked && passArg == "Mon")
      {
          isChecked = true;
      }
      ...
      
      if(isChecked)
      {
          MessageBox.Show("RAN");
      }
      

      我不想做出许多不同的 if 语句。

      好吧,您可以将复选框放在一个循环中,设置Tag 或其他一些属性并将其与pasArg 进行比较,但我倾向于使用最简单的 em> 首先有效的解决方案,然后专注于使其更好。您可能会发现,当 7 个 if 语句可以正常工作时,您会花费更多时间尝试提出一个聪明的解决方案(稍后您可能无法理解)。

      【讨论】:

      • 但是我有 5 个不同的日子。用户可以选择任何天数组合。这将需要我有许多不同的 if 语句来预测每一个组合
      • @DhavalDesai 您的示例仅在passArg 中显示一天。如果您需要与任何天数组合进行比较,请显示在这种情况下 passArg 会是什么。在任何情况下,您都不必在单独的 if 语句中检查“每个组合”。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-15
      • 1970-01-01
      • 2011-12-29
      • 1970-01-01
      • 2012-03-22
      • 1970-01-01
      相关资源
      最近更新 更多