感谢PowerShell Logic,我熟悉当左操作数是集合时-eq
如何工作的一些复杂性 - 而不是布尔值,-eq
将返回一个元素数组等于右操作数。从3.0规范:
如果左操作数指定的值不是集合,则为 结果有类型bool。否则,结果可能是空的 包含元素的无约束一维数组 与由指定的值进行比较时测试为True的集合 右操作数。
那就是说,我找到了一个对我来说没有意义的案例。如果我声明一个元素也是一个数组的数组,我实际上不能让-eq
匹配该元素:
$a = @( 1, @(2, 3) )
$a -eq 1 # results in an array with a single element, containing 1
$a -eq @( 2, 3 ) # results in an empty array
发生了什么事?要判断这是PowerShell包装混合型数组元素,包装二维数组,值与引用类型相等检查的问题,还是其中任何子集,都不是特别容易。
答案 0 :(得分:2)
我认为它必须具有这样的事实:.NET中的数组比较只比较两个对象引用同一个对象,而不是它们具有相同的值。考虑:
# ~> @(2,3).Equals(@(2,3))
False
# ~> $arr = @(2,3)
# ~> $arr.Equals($arr)
True
# ~> $arr.Equals(@(2,3))
False
# ~> @(1, $arr) -eq $arr
2
3