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

, 당신은 당신이 Linq에의 Any 확장 메서드 사용 후 배열에서 확인하고자하는 모든 컨트롤을 넣을 수 :

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

또는 양자 택일을하지 않을 경우 모든 컨트롤 else - 블록 무시할 것이다 -

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

이것 평범한 이전 if 간의 성능 차이 것은 : 문자열의 배열은 동일한 유형 만들있다.

+1

+1 그 밖의 무엇이 폼에 있는가에 따라 달라진다 this.Controls.OfType () .Any –

+0

@AlexK. 사실, OP가 현재 양식에서 해당 유형의 모든 컨트롤을 확인해야하거나 해당 OP의 모든 컨트롤이 일부 컨테이너 아래에 있어야한다고 가정합니다. –

0

순수한 성능 관점에서 볼 때, 가장 자주 사용되는 순서대로 수표를 작성하면 기존 방법의 효율성을 높일 수있는 유일한 방법이 있습니다.

그러나 값을 비교하는 것과 같은 간단한 작업은 오래된 구형 기술에도 거의 즉각적입니다. 여기에서 최적화하려고하면 시간 낭비입니다. 코드를 더 빠르고 간결하게 작성하는 방법을 배우는 데 중점을 둡니다. 앞으로 코드를 다시 방문하면 이해하고 수정하는 것이 훨씬 쉬울 것입니다. p.s.w.g의 대답은 어떻게 linq를 활용할 수 있는지 보여줍니다. 나는 그것을 시험해 보는 것이 좋습니다.

String.IsNullOrEmpty() 대신 String.IsNullOrWhiteSpace()을 사용하는 것이 좋습니다. 다시 말하지만 약간의 추가 성능 오버 헤드가 필요하지만 훨씬 더 유용합니다.