C # - Эффективность проверки нескольких нулевых длин текста - PullRequest
1 голос
/ 09 сентября 2010

У меня есть шесть текстовых полей, и, пока в одном есть действительный ввод, я хочу, чтобы моя программа продолжила импорт кода.Проблема в том, что я не знаю, какой самый эффективный способ это сделать.До сих пор я предлагал две альтернативы:

Версия 1:

        //if no paths are specified the user is shown an error and the program
        //will do nothing
        if ((txtForecastFTE.Text.Length != 0)
            || (txtActualFTE.Text.Length != 0)
            || (txtForecastAHT.Text.Length != 0)
            || (txtActualAHT.Text.Length != 0)
            || (txtForecastVolume.Text.Length != 0)
            || (txtActualVolume.Text.Length != 0))
        {
            if (txtForecastFTE.Text.Length != 0)
            {
                //import code
            }//end if

            if (txtActualFTE.Text.Length != 0)
            {
                //import code
            }//end if

            if (txtForecastAHT.Text.Length != 0)
            {
                //import code
            }//end if

            if (txtActualAHT.Text.Length != 0)
            {
                //import code
            }//end if

            if (txtForecastVolume.Text.Length != 0)
            {
                //import code
            }//end if

            if (txtActualVolume.Text.Length != 0)
            {
                //import code
            }//end if
        }//end if
        else
        {
            MessageBox.Show("You must enter the path for at least one file.");
        }//end if-else
    }//end import code

Версия 2:

        //if no paths are specified the user is shown an error and the program
        //will do nothing
        if (txtForecastFTE.Text.Length != 0)
        {
    pathTrue = true;
            //import code
        }//end if

        if (txtActualFTE.Text.Length != 0)
        {
    pathTrue = true;
            //import code
        }//end if

        if (txtForecastAHT.Text.Length != 0)
        {
    pathTrue = true;
            //import code
        }//end if

        if (txtActualAHT.Text.Length != 0)
        {
    pathTrue = true;
            //import code
        }//end if

        if (txtForecastVolume.Text.Length != 0)
        {
    pathTrue = true;
            //import code
        }//end if

        if (txtActualVolume.Text.Length != 0)
        {
    pathTrue = true;
            //import code
        }//end if

        if (!pathTrue)
        {
            MessageBox.Show("You must enter the path for at least one file.");
        }//end if
    }//end import code

Очевидно, я добавлюдальнейшая проверка (try-catch) для каждого раздела импорта файлов, но это основная суть.

Любая помощь приветствуется :) Если есть другие варианты, которые были бы более эффективными, чем любая из двух предоставленных версий, пожалуйстане стесняйтесь выдвигать это.Спасибо, ребята.

Ответы [ 2 ]

2 голосов
/ 09 сентября 2010

Я бы сказал, что «эффективность» в этом случае должна быть не вашей целью, а скорее простым, читаемым, не избыточным кодом.

if (this.Controls.OfType<TextBox>().Any(tb => tb.Text.Length > 0))
{
    // get to work
}

Другой подход, который может быть более подходящим при проверке ваших образцов, может быть

bool hasPath = false;
foreach (TextBox box in this.Controls.OfType<TextBox>().Where(tb => tb.Text.Length > 0))
{
     hasPath = true;
     // import code
}

if (!hasPath)
{
     MessageBox.Show("Need data");
}
0 голосов
/ 09 сентября 2010

Я бы посоветовал вам сохранить эти текстовые поля в закрытой переменной List<TextBox> во время инициализации и сделать то же самое, что объяснил Энтони.

Я не фанат свойства Controls, потому что иногда ваш дочерний элемент управленияне является непосредственным ребенком вашего Form / UserControl (например, вложено в GroupBox).Если вы перечислите свойство Controls для выполнения каких-либо действий, а затем переместите элемент управления и поместите их во вложенный контейнер, ваш код потеряет магию, и иногда трудно понять, что только что произошло.Поэтому я предпочитаю идентифицировать их явно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...