Уменьшение избыточности в наборах повторяющихся задач в Visual Studio

#c# #visual-studio

#c# #visual-studio

Вопрос:

Я новичок, и я хотел бы знать, есть ли какой-либо способ уменьшить избыточность в следующем коде:

 if(checkBoxA.Checked == true) 
{  
   comboBoxA.Enabled = true; 
   textBoxA.Enabled = true; 
} 

string stringA = comboBoxA.Text; 
float floatA = float.parse(textBoxA.Text);

if(checkBoxB.Checked == true) 
{  
   comboBoxB.Enabled = true; 
   textBoxB.Enabled = true; 
} 

string stringB = comboBoxB.Text; 
float floatB = float.parse(textBoxB.Text); 
  

Любая помощь была бы оценена. Спасибо!

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

1. Вы можете извлечь метод с подписью, например (строка, с плавающей точкой) Получение информации (флажок checkBox, поле ComboBox ComboBox, текстовое поле TextBox)

Ответ №1:

Ну, вы могли бы сделать это, обернув это в функцию. Хотя для установки значений вам может понадобиться контейнер или кортеж.

Вы можете настроить именование на значимые имена.

Вот пример контейнера:

 public class Container
{
    public string StringValue {get;set;}
    public float FloatValue {get;set;}
}
  
 private Container HandleState(CheckBox checkBox, ComboBox comboBox, TextBox textBox)
{
    if(checkBox.Checked == true) 
    {  
        comboBox.Enabled = true; 
        textBox.Enabled = true; 
    }

    return new Container()
    {
        StringValue = comboBox.Text;
        FloatValue = float.parse(textBox.Text);
    };
} 
  

И назовите это как:

 var resultA = HandleState(checkBoxA, comboBoxA, textBoxA);
var resultB = HandleState(checkBoxB, comboBoxB, textBoxB);
  

Ответ №2:

Если вы используете Winforms, вы можете группировать элементы управления вместе и выполнять свои операции со всей группой. Вы можете использовать 2 контейнера (панели) и добавить comboBoxA и textBoxA в первый, а comboBoxB и textBoxB во второй. Когда флажок установлен, вы можете использовать приведенный ниже код, чтобы включить все элементы в соответствующем контейнере (я использовал panel в качестве контейнера)

         foreach (var item in panel1.Controls)
        {
            (item as Control).Enabled = true;
        } 
  

Ответ №3:

Все состояния разные, и цели разные, поэтому в основном вы не можете избежать.