0

У меня есть «страница поиска», где требуется, чтобы по крайней мере одно текстовое поле имело некоторый ввод. Следующий метод проверяет это следующим образом:Лучший способ проверить, что по крайней мере одно текстовое поле многих имеет контент?

if (!String.IsNullOrEmpty(txtNome.Text)) 
    { 
     return true; 
    } 
    if (!String.IsNullOrEmpty(txtEndereco.Text)) 
    { 
     return true; 
    } 
    if (!String.IsNullOrEmpty(txtCidade.Text)) 
    { 
     return true; 
    } 
    if (!String.IsNullOrEmpty(txtCEP.Text)) 
    { 
     return true; 
    } 

    return false; 

Не было никаких проблем с результатами этого метода. Мой вопрос связан с производительностью: есть ли лучший способ сделать эту проверку? Одна из возможных альтернатив я подумал:

string X = String.Concat(txtNome.Text,...,txtCEP.Text) 
if(!String.IsNullOrEmpty(X)) 
{ 
    return true; 
} 

Я думаю, что использование если возврат шаблона лучше, когда первое поле не пустое, но и для других сценариев использования, используя String.Concat лучше.

Может ли кто-нибудь сообщить мне, какой путь лучше и почему? Есть еще один, еще лучший способ?

+0

Если этот код - это все, о чем вы говорите, забудьте о проблемах с производительностью и производительности. Я гарантирую :) – Alireza

ответ

4

Если все элементы управления одного и того же типа, вы можете поместить все элементы управления, которые вы хотите проверить в массиве затем использовать метод Any расширения Linq в:

return new[] { txtNome, txtEndereco, txtCidade, txtCEP } 
    .Any(x => !String.IsNullOrEmpty(x.Text)); 

или в качестве альтернативы, если не все элементы управления одного и того же типа, создать массив строк:

return new[] { txtNome.Text, txtEndereco.Text, txtCidade.Text, txtCEP.Text } 
    .Any(x => !String.IsNullOrEmpty(x)); 

разница в производительности между этим и обычный старый if - else -блоком будет незначительным.

+1

+1 Или в зависимости от того, что еще есть на форме, возможно, это.Controls.OfType (). Любой –

+0

@AlexK. Правда, если OP должен проверить все элементы управления этого типа в текущей форме, или все элементы управления этого OP хотят находиться под некоторым контейнером. –

0

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

Но простые операции, такие как сравнение значений, являются почти мгновенными даже для старой, устаревшей технологии. Попытка оптимизировать здесь - настоящая трата времени. Вместо этого сосредоточьтесь на том, чтобы быстрее писать и писать код для написания кода, поэтому при повторном посещении кода в будущем будет намного легче понять и изменить. Ответ p.s.w.g показывает, как вы можете использовать linq; Я бы рекомендовал попробовать это.

На боковой ноте я рекомендую вам вместо String.IsNullOrEmpty() использовать String.IsNullOrWhiteSpace(). Опять же, для этого требуется небольшая дополнительная накладная производительность, но она намного полезнее.