powershell - .contains() vs -contains,一个返回true,另一个返回false
问题描述
我有一个像这样的哈希表:
$Path = @{
"BM" = "\\srv\xy"
"BB4-L" = "\\srv\xy"
"BB4-R" = "\\srv\xy"
"HSB" = "\\srv\xy"
"IB" = "\\srv\xy"
"LM1" = "\\srv\xy"
"LM2" = "\\srv\xy"
"sis" = "\\srv\xy"
}
我$env:username
是姐姐。为什么.contains()
和-contains
东西不一样?
PS Z:\Powershell-Scripts\Functions> $Path -contains $env:username
False
PS Z:\Powershell-Scripts\Functions> $Path.contains($env:username)
True
如果可能,我总是喜欢使用 PowerShell 语法,但在这种情况下我不能,因为-contains
会返回 false。
有.contains()
什么-contains
不同?
解决方案
$Path
是一个System.Collections.Hashtable
。您还可以阅读以下文档:
当测试值是一个集合时,包含运算符使用引用相等。仅当参考值之一是测试值对象的同一实例时,它才返回 TRUE。
哈希表中的每一项都是System.Collections.DictionaryEntry
. 您正在将其与string
. 由于类型不匹配,引用也不匹配。Contains(System.Object key)
并ContainsKey(System.Object key)
使用密钥进行测试。为了在比较中保持一致,您应该编写:
$Path.Keys -contains $env:username
推荐阅读
- c++ - 使用 cmake 在 Linux for Windows 上交叉编译程序
- php - PhpStorm:更改 DocumentRoot 后更改 URL
- vba - 如何使用 VBA 在 ms 访问表单中创建自定义自动编号?
- javascript - JavaScript:从对象数组中删除空/未定义/空属性
- php - 当两个不同的路由组内有相同的路由时,如何管理 Blade 中的路由?
- python - 提取量的正则表达式
- mongoose - 猫鼬 findByIdAndUpdate - 检查字段并修改它
- list - 如何使用菜单驱动的序言程序插入成员列表?
- python - 如何最好地为 python selenium chrome 安装代理
- node.js - 我无法安装 gatsby