我有以下方法:
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)
,但我不明白为什么。有没有人看到我没有的东西?
答案 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。