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)); 

或者,如果不是所有的控制是相同類型的,創建一個字符串數組:

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

這和普通老式if之間的性能差異 - else - 嵌段將是微不足道的。

+1

+1或取決於表格上的其他內容也許this.Controls.OfType ()。任何 –

+0

@AlexK。誠然,假設OP需要檢查當前表單上的該類型的所有控件,或者該OP的所有控件都在某個容器下。 –

0

從純粹的性能角度來看,您的原始方法可以獲得更高效率的唯一方法是如果您按照最常用到最少使用的順序編寫檢查。

但即使是過時的舊技術,像比較值這樣的簡單操作也幾乎是即時的。試圖在這裏優化是真正浪費你的時間。而是專注於學習更快速,更簡潔地編寫代碼的方式,因此,當您將來重新訪問代碼時,理解和修改將變得更加容易。 p.s.w.g的答案顯示瞭如何利用linq;我建議嘗試一下。

在附註上,我建議您替代String.IsNullOrEmpty(),您使用String.IsNullOrWhiteSpace()。同樣,它確實需要稍微額外的性能開銷,但它更有用。

相關問題