196

次のスニペットを検討してください。

"12-18" -Contains "-"

これは に評価されると思うかもしれtrueませんが、そうではありません。これは代わりに評価されfalseます。なぜこれが起こるのかわかりませんが、そうです。

これを回避するには、代わりにこれを使用できます。

"12-18".Contains("-")

これで、式は true と評価されます。

最初のコード スニペットがそのように動作するのはなぜですか? -とうまく機能しない特別なことはあり-Containsますか? ドキュメントには、それについて何も言及されていません。

4

4 に答える 4

263

演算子は部分文字列の-Contains比較を行わず、一致は完全な文字列である必要があり、コレクションの検索に使用されます。

リンク先のドキュメントから:

-Contains 説明: 封じ込めオペレーター。参照値のコレクションに単一のテスト値が含まれているかどうかを示します。

あなたが提供した例では、文字列項目を 1 つだけ含むコレクションを使用しています。

リンク先のドキュメントを読むと、この動作を示す例が表示されます。

例:

PS C:\> "abc", "def" -Contains "def"
True

PS C:\> "Windows", "PowerShell" -Contains "Shell"
False  #Not an exact match

-Matchあなたが望むのは演算子だと思います:

"12-18" -Match "-"

を返しますTrue

重要:コメントおよびリンクされたドキュメント-Matchで指摘されているように、オペレーターは正規表現を使用してテキスト マッチングを実行することに注意してください。

于 2013-09-18T16:38:32.840 に答える