与同事讨论时,$null
应该位于支票的左侧还是右侧?为什么这很重要的任何例子?
$abc = $null
$null -eq $abc
True
$abc -eq $null
True
一切都好
$abc = 6,7,$null,8,9
$null -eq $abc
False
$abc -eq $null
*No output*
有人可以解释比较数组时发生了什么吗?
最佳答案
执行比较操作时,PowerShell将首先评估操作数操作数,以确定它是集合还是标量值。如果它是标量,它将把操作数彼此比较为整个对象。
2 -eq 1,2,$null,3
False
$null -eq 1,2,$null,3
False
4 -eq 1,2,$null,3
False
如果它是一个集合,它将在集合中进行迭代,将每个元素与第二个操作数进行比较,如果找到匹配项,则返回第二个操作数的值。
1,2,$null,3 -eq 2
2
1,2,$null,3 -eq $null
<nothing appears, indicating returned value is $null>
1,2,3 -eq 4
<nothing appears, indicating returned value is $null>
第二个和第三个示例之间的关键区别。除非您绝对知道,第二个操作数始终是
$null
还是从不,否则您将无法信任比较操作的输出。附带说明一下,如果两个操作数都是集合,则每种情况下
-eq
都会返回$null
,因为您不能使用-eq
来比较集合。因此,为了回答这个问题,通常将
$null
放在左侧,因为在比较操作中使用$null
时,假定您要比较标量值。如果这个假设是错误的,那么$null
可能会更好地放在另一侧,但这不太可能。相反,我总是将
$null
放在右边,因为我在上述假设下编写了我的代码-当在比较操作中明确提到$null
时,我总是比较标量值。这样,当我返回非 bool 值时,我知道我没有正确访问方程式中的集合对象。但是,我被困在陷阱中,因此,通过更改方式可以更好地为我的编码实践服务。总而言之,就像任何编码实践一样,这是一个见仁见智的问题。如果我要教PowerShell,我会教这种做法。但是,我发现我不太可能改变自己的煽动性方式。
关于powershell - $ null是否应位于等式比较的左侧? (带有数组的-eq),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58217913/