2013-10-17 108 views
0

我有一個固定值的字符串數組和一個文本動態更改的richtextbox。 richtextbox中的一些行以字符串數組中的值開頭。我只想選擇不以字符串數組中的值開頭的richtextbox行。 以下代碼返回richtextbox中的所有行。比較字符串數組與另一個起始值

string[] parts = new string[] { "Definition:", "derivation:", "derivations:"}; 
IEnumerable<string> lines = richTextBox1.Lines.Where(
c =>parts.Any(b=>!c.StartsWith(b))); 

我的問題是:如何僅選擇richtextbox中不以字符串數組中的值開頭的行?

回答

3

您將(!)運算符放在錯誤的地方。如果你想使用Any然後

string[] parts = new string[] { "Definition:", "derivation:", "derivations:"}; 
IEnumerable<string> lines = richTextBox1.Lines.Where(
           c => !parts.Any(b => c.StartsWith(b))); 
8

更改AnyAll。寫完後,它將返回所有行,因爲一行不能以多個單詞開頭。

您當前的代碼表示「如果零件中有任何單詞不是該行的第一個單詞,則返回true」。顯然,該行不能以「foo」和「derivation:」開頭。所以你總是變得真實。

你想說「如果零件中的所有單詞不是該行的第一個單詞,則返回true」。

另一種方式來做到這一點是:

lines = richTextBox1.Lines.Where(c => !parts.Any(b => c.StartsWith(b))); 

這可能是我會怎麼寫它。

+0

我改變任何所有,仍然我得到了所有線。不管怎麼說,還是要謝謝你。 – FadelMS

+0

@FadelMS:不知道你做了什麼,但是在你的代碼中改變任何東西都不可能返回相同的東西。除非您的文本框中沒有任何行以'parts'中的任何單詞開頭。我用一串字符串測試了你的代碼;它返回了一切。將「Any」更改爲「全部」返回了預期結果。 –

+0

對不起Jim,問題出在操作員'!'的位置上。謝謝 – FadelMS

相關問題