0

私は次の方法を持っています:

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)と、「/」で始まるすべての引数のリストを取得します。リストには、「/」で始まる引数が入力されます。

がtrueに設定され、 falseが返されると、それ!invertSelection && x.StartsWith(filter)は戻らないと思いますが、その理由はわかりません。誰かが私が見ないものを見ますか?trueinvertSelectionx.StartsWith(filter)

4

3 に答える 3

9

他の回答が言っているように、あなたの条件は、が偽の場合にのみ真を返しますinvertSelection

結果を条件付きで反転する最も簡単な方法は、XOR演算子を使用することです。

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

一度だけ指定するので、lcのソリューションよりもこれを好みますStartsWith

于 2012-08-14T09:49:20.947 に答える
7
.Where(x => invertSelection ? !x.StartsWith(filter) : x.StartsWith(filter))
于 2012-08-14T09:47:23.253 に答える
2

!invertSelection && x.StartsWith(filter)の値(invertSelection = true)は常にfalseです。

于 2012-08-14T09:49:25.093 に答える