应该时条件不会返回true

时间:2012-08-14 09:44:55

标签: c# linq conditional-statements where

我有以下方法:

public static List<string> GetArgsListStartsWith(string filter, bool invertSelection, bool lowercaseArgs)
{
    return GetArgumentsList(lowercaseArgs)
          .Where(x => !invertSelection && x.StartsWith(filter)).ToList();
}

然后我称之为GetArgsListStartsWith("/", true, false)

这将转化为:获取不以“/”开头的所有参数的列表。 问题是列表没有填充,即使所有参数都不以“/".

开头

如果我调用GetArgsListStartsWith("/", false, false)转换为:获取以“/”开头的所有参数的列表,列表会填充以“/”开头的参数。

我怀疑!invertSelection && x.StartsWith(filter)true设置为true且invertSelection返回false时不会返回x.StartsWith(filter),但我不明白为什么。有没有人看到我没有的东西?

3 个答案:

答案 0 :(得分:9)

正如其他答案所说,当invertSelection为假时,您的情况只会永远返回true。

有条件地反转结果的最简单方法是使用XOR operator

.Where(x => x.StartsWith(filter) ^ invertSelection)

我比lc的解决方案更喜欢这个,因为它只指定StartsWith一次。

答案 1 :(得分:7)

.Where(x => invertSelection ? !x.StartsWith(filter) : x.StartsWith(filter))

答案 2 :(得分:2)

!invertSelection&amp;&amp; x.StartsWith(filter)其中invertSelection = true始终为false。