C # Динамическая настройка If

#c# #wpf #visual-studio

#c# #wpf #visual-студия #visual-studio

Вопрос:

Создание приложения WPF на C # У меня есть 5 флажков, и когда выбран один или несколько, я хочу, чтобы аргумент инструкции it изменялся динамически. Например, у меня есть Пн, вт, Ср, чт и Пт в качестве флажков. Если пользователь выбирает Пн, Ср и Пт, то я хочу, чтобы аргумент для оператора if изменился, чтобы отразить это. Я не хочу делать множество разных инструкций if. Вот пример, который я написал, но оператор if, очевидно, неверен

 string passArg = "";

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

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

Извините, если это глупый вопрос

Комментарии:

1. Вам нужна инструкция switch?

2. Достаточно только 5 инструкций if. Вы создаете свою строку с помощью оператора =. Как passArg ="Thu" и passArg ="Fri" и т. Д

3. @M.kazemAkhgary и как бы вы вычли, если флажок снят? Вы не можете просто -= «некатенировать» строки…

4. @Tinwor вы не можете перегружать операторы для существующих классов. И вы не можете получить из string , потому что он запечатан.

5. Верно, мне нужно поспать. Спасибо за исправление

Ответ №1:

Вы можете инициировать событие, когда флажок установлен Checked или Unchecked , и в этом методе вы можете устанавливать или отменять настройки.
Например, в вашей форме 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 amp;amp; passArg == "Mon")
{
    isChecked = true;
}
...

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

Я не хочу делать множество разных инструкций if.

Ну, вы могли бы установить флажки в цикле, установить Tag или какое-либо другое свойство и сравнить это с pasArg но я предпочитаю использовать самое простое решение, которое работает в первую очередь, а затем сосредоточиться на том, чтобы сделать его лучше. Вы можете обнаружить, что тратите больше времени на то, чтобы придумать умное решение (которое вы, возможно, не поймете позже), когда 7 if инструкций будут работать просто отлично.

Комментарии:

1. Но у меня есть 5 разных дней. Пользователь может выбрать любую комбинацию дней. Это потребовало бы от меня наличия множества различных операторов if для прогнозирования каждой отдельной комбинации

2. @DhavalDesai В вашем примере показан только один день passArg . Если вам нужно сравнить с любой комбинацией дней, то покажите, что passArg было бы в этом случае. В любом случае вам не нужно проверять наличие «каждой отдельной комбинации» в отдельных if операторах.