Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
poziom ważności: ostrzeżenie
Opis
Aby upewnić się, że program PowerShell prawidłowo wykonuje porównania, element $null powinien znajdować się po lewej stronie operatora.
Istnieje wiele powodów, dla których taka sytuacja występuje:
-
$nulljest wartością skalarną. Gdy wartość po lewej stronie operatora jest skalarną, operatory porównania zwracają wartość wartości logicznej. Gdy wartość jest kolekcją, operatory porównania zwracają wszystkie pasujące wartości lub pustą tablicę, jeśli w kolekcji nie ma dopasowań. - Program PowerShell wykonuje rzutowanie typu na operand po prawej stronie, co powoduje nieprawidłowe porównania, gdy
$nulljest rzutowy na inne typy skalarne.
Jedynym sposobem niezawodnego sprawdzenia, czy wartość jest $null, jest umieszczenie $null po lewej stronie operatora, aby wykonać porównanie skalarne.
Jak
Przenieś $null z lewej strony porównania.
Przykład
Błędny
function Test-CompareWithNull
{
if ($DebugPreference -eq $null)
{
}
}
Poprawny
function Test-CompareWithNull
{
if ($null -eq $DebugPreference)
{
}
}
Wypróbuj to samodzielnie
# This example returns 'false' because the comparison does not return any objects from the array
if (@() -eq $null) { 'true' } else { 'false' }
# This example returns 'true' because the array is empty
if ($null -ne @()) { 'true' } else { 'false' }
W ten sposób operator porównania działa zgodnie z projektem. Jednak, jak pokazano, może to prowadzić do nieu intuicyjnego zachowania, zwłaszcza gdy intencja jest prostym testem wartości null.
W poniższym przykładzie pokazano zaprojektowane zachowanie operatora porównania, gdy lewa strona jest kolekcją. Każdy element w kolekcji jest porównywany z wartością po prawej stronie. Gdy wartość true, zwracany jest ten element kolekcji.
PS> 1,2,3,1,2 -eq $null
PS> 1,2,3,1,2 -eq 1
1
1
PS> (1,2,3,1,2 -eq $null).count
0
PS> (1,2,$null,3,$null,1,2 -eq $null).count
2