2012-01-20 18 views
5

例如,如果在計算機零件的材料列表中包含許多不同零件編號的文本框中,我只需要一種類型的cat5電纜在任何給定的時間,如果看到兩種不同的類型,警告用戶。 cat5電纜部件號可以是:cat5PART#1,cat5PART#2和cat5PART#3。所以如果只有一個cat5零件號碼沒有問題,但只要看到兩種不同的類型或更多,就會發出警告。我可以很容易地爲每個變體手動寫出三次不同的時間,但是在更大的部件列表中,這需要更長的時間和風險錯誤。另外我只想知道程序員如何處理這種類型的函數。我也不知道它是什麼,所以我不知道如何谷歌,儘管知道會有這種確切的情況有很多的解決方案,所以它是令人沮喪的,這麼簡單。如何避免爲不同字符串編寫簡單的「if contains」語句的每個變體

我的代碼的一個例子顯然不起作用,因爲它只會在檢測到所有三個部分時發出警告,而不僅僅是如果檢測到兩個部分。我假設我會使用&和|的一些變化或者它可能完全不同?

基本上我不想寫出來,在更大的範圍

如果包含第1部分和第2部分

如果包含第1部分和第3部分

如果包含部分2和第3部分

謝謝。

if ((textBox2.Text.Contains("PART#1")) 
     && (textBox2.Text.Contains("PART#2")) 
     && (textBox2.Text.Contains("PART#3"))) 
       { 
      MessageBox.Show("2 types of cat5 part numbers seen at the same time"); 
       } 
+0

這當然不會幫助你將你的子表達式包裝在不必要的括號中。 – ChaosPandion

+1

...但它肯定沒有傷害,所以我不明白這與問題有關。 –

+0

我嘗試刪除括號,我得到的錯誤,你能幫我理解哪些我應該刪除,所以我可以知道嗎?也可以更容易地閱讀代碼,或者在大規模使用較少的括號時可以提高性能嗎?Thx – Saintjah

回答

6

你可以試試這個:

string[] parts = new [] {"PART#1", "PART#2", "PART#3"}; 
int count = parts.Count(s => textBox2.Text.Contains(s)); 
if (count >= 2) ... 
+0

非常感謝你和brokenglass,現在它變得非常有意義。我需要更多的思考。 – Saintjah

4

您可以使用LINQ/Count()來測試你是否有至少X個字符串要測試包含在textBox2.Text

string[] parts = { "PART#1", "PART#2", "PART#3" }; 
if(parts.Count(s=> textBox2.Text.Contains(s)) >= 2) 
{ 
    MessageBox.Show("2 types of cat5 part numbers seen at the same time"); 
} 
0

每個字符串添加到List<string>,然後遍歷每一個foreach聲明。

1

本質上講,這問題是有點不同的東西的設計解決了。

你真正想要的是對某些輸入運行某種規則驗證,那麼我可能會創建一些更一般的東西,然後每個規則將包含一組很好的屬性,它希望檢查。然後你可以從通用的處理數據的'輸入運行規則'階段調用它。

這聽起來有點過頭了,但總的來說,做這樣的事情總是很好,所以你準備好了改變。最後(在具體的規則本身中),你顯然有一個類似於你的實現,但可能寫得比較短,就像BrokenGlass所表明的那樣。