В чем разница между -contains и .contains в сценарии powershell? - PullRequest
2 голосов
/ 16 мая 2019

В чем разница между .contains и -contains?Один кажется чувствительным к регистру, а другой нет.

PS C:\WINDOWS\system32> ("jack", "john", "jill").contains("Jill")
False


PS C:\WINDOWS\system32> "jack", "john", "jill" -contains "Jill"
True

Почему существует такое расхождение?

Ответы [ 2 ]

3 голосов
/ 16 мая 2019

Оператор -Contains сравнивает один объект с коллекцией.Он возвращает true, если все это значение существует как элемент в коллекции.Он не учитывает регистр и не ограничивается строками.-CContains - чувствительная к регистру версия.Метод .Contains() - это метод .NET из класса String.Она сравнивает подстроку со строкой (по умолчанию чувствительна к регистру).

Ваш первый пример может использоваться для достижения желаемых результатов, если вы преобразуете свой массив в строку, поскольку jill будет подстрокой в ​​пределахстрока большего размера.

("jack","jill","john" -join ",").Contains("jill")
True

См. About_Comparison_Operators для получения подробной информации и примеров использования -Contains.См. String.Contains метод для объяснения метода .Contains.

0 голосов
/ 16 мая 2019

Оба очень разные в действительности.

$str = "abcde"

$str -contains "abcd" 
False

$str.Contains("abcd") 
True

Почему эта разница?

Поскольку

-Contains является оператором удержания согласно MS,Сообщает, включает ли коллекция эталонных значений одно тестовое значение.Всегда возвращает логическое значение.Возвращает значение ИСТИНА только в том случае, если тестовое значение точно соответствует хотя бы одному из ссылочных значений. Это должен быть один из элементов include (содержит) в массиве, а не подстрока строкового элемента

Метод Contains () - это один из методов строкового объекта, который поддерживает подстроку, поэтому вы получаете True при запуске $str.Contains("abcd")

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...