Есть ли более короткий способ, чтобы написать следующий оператор if?


У меня есть следующий код, который использует четыре оператора if, чтобы проверить значение в четыре разных поля со списком.

if (!String.IsNullOrEmpty(tx_cmb_Circuits1.Text.Trim()))
    emp.CircuitEmail_Group_Rels.Add(
        new Circuit_Email_Group_Rel
        {
            Circuits = (Circuits) tx_cmb_Circuits1.SelectedItem,
            Group = emp
        });
if (!String.IsNullOrEmpty(tx_cmb_Circuits2.Text.Trim()))
    emp.CircuitEmail_Group_Rels.Add(
        new Circuit_Email_Group_Rel
        {
            Circuits = (Circuits) tx_cmb_Circuits2.SelectedItem,
            Group = emp
        });
if (!String.IsNullOrEmpty(tx_cmb_Circuits3.Text.Trim()))
    emp.CircuitEmail_Group_Rels.Add(
        new Circuit_Email_Group_Rel
        {
            Circuits = (Circuits) tx_cmb_Circuits3.SelectedItem,
            Group = emp
        });
if (!String.IsNullOrEmpty(tx_cmb_Circuits4.Text.Trim()))
    emp.CircuitEmail_Group_Rels.Add(
        new Circuit_Email_Group_Rel
        {
            Circuits = (Circuits) tx_cmb_Circuits4.SelectedItem,
            Group = emp
        });

Есть более короткий путь, чтобы сделать то же самое. Пожалуйста, просмотрите мой код.



731
6
c#
задан 28 марта 2011 в 03:03 Источник Поделиться
Комментарии
4 ответа

Добавить все элементы в список и вместо того, чтобы делать операцию foreach.

var buttons = new List<Button>
{
tx_cmb_Circuits1,
tx_cmb_Circuits2,
...
};

foreach ( var button in buttons )
{
if ( !String.IsNullOrEmpty( button.Text.Trim() ) )
{
emp.CircuitEmail_Group_Rels.Add(
new Circuit_Email_Group_Rel
{
Circuits = (Circuits) button.SelectedItem,
Group = emp
} );
}
}

С. П.: рассмотреть вопрос о предоставлении ваши переменные лучше имена. Никакой реальной необходимости сокращения как tx_cmb сегодня.

13
ответ дан 28 марта 2011 в 03:03 Источник Поделиться

Вот еще один подход, основанный на ответ Стивена Jeuris это:

emp.CircuitEmail_Group_Rels.AddRange(from button in buttons
where !String.IsNullOrEmpty(button.Text.Trim())
select new Circuit_Email_Group_Rel
{
Circuits = button,
Group = button
}).ToList());

В список() может или не может потребоваться, в зависимости от типа CircuitEmail_Group_Rels.
И если это возможно, постарайтесь обрезать кнопку.Ранее текст. Желательно только один раз каждый раз .Текст обновляется.

4
ответ дан 7 апреля 2011 в 11:04 Источник Поделиться

Поскольку операторы внутри все МФС похожи, вы можете повторно фактором заявлений в действие, например действие

1
ответ дан 29 марта 2011 в 04:03 Источник Поделиться

Я фанат вытаскивая распространенной операцией в функции с самодокументируемых имя. Трудно точно знать, что это имя должно быть в этом случае, учитывая контекст отсутствует, но что-то вроде этого:

public void GetCircuitEmailFrom(ComboBox emailBox, MyThingy emp)
{
if (!String.IsNullOrEmpty(emailBox.Text.Trim()))
emp.CircuitEmail_Group_Rels.Add(
new Circuit_Email_Group_Rel
{
Circuits = (Circuits)emailBox.SelectedItem,
Group = emp
});
}
public void foo()
{
GetCircuitEmailFrom(tx_cmb_Circuits1, emp);
GetCircuitEmailFrom(tx_cmb_Circuits2, emp);
GetCircuitEmailFrom(tx_cmb_Circuits3, emp);
GetCircuitEmailFrom(tx_cmb_Circuits4, emp);
}

1
ответ дан 8 апреля 2011 в 05:04 Источник Поделиться