将字符串数组与另一个中的起始值进行比较

时间:2013-10-17 18:14:51

标签: c# linq

我有一个包含固定值的字符串数组和一个动态更改文本的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的行?

2 个答案:

答案 0 :(得分:8)

Any更改为All。正如它所写,它返回所有行,因为一行不能以多个单词开头。

您当前的代码说,“如果部分中的任何单词不是该行的第一个单词,则返回true。”显然,该行不能以“foo”和“derivation:”开头。所以你永远都会成真。

你想说,“如果部分中的所有单词都不是该行的第一个单词,则返回true。”

另一种方法是:

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

这可能是我写的。

答案 1 :(得分:3)

您将(!)运算符放在错误的位置。如果您想使用Any,那么

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