about_Booleans
Krótki opis
Opisuje sposób oceniania wyrażeń logicznych.
Długi opis
Program PowerShell może niejawnie traktować dowolny typ jako wartość logiczną. Ważne jest, aby zrozumieć reguły używane przez program PowerShell do konwertowania innych typów na wartości logiczne .
Konwertowanie z typów skalarnych
Typ skalarny to niepodzielna ilość, która może przechowywać tylko jedną wartość naraz. Następujące typy oceniają wartość :$false
- Puste ciągi, takie jak
''
lub""
- Wartości null, takie jak
$null
- Dowolny typ liczbowy z wartością
0
Przykłady:
PS> $false -eq ''
True
PS> if ("") { $true } else { $false }
False
PS> if ($null) { $true } else { $false }
False
PS> if ([int]0) { $true } else { $false }
False
PS> if ([double]0.0) { $true } else { $false }
False
Następujące typy oceniają wartość :$true
- Ciągi niepuste
- Wystąpienia innych typów niezwiązanych z kolekcją
Przykłady:
# a non-collection type
PS> [bool]@{value = 0}
True
# non-empty strings
PS> if ('hello') { $true } else { $false }
True
PS> [bool]'False'
True
Należy pamiętać, że różni się to od jawnego analizowania ciągów:
PS> [bool]::Parse('false')
False
PS> [bool]::Parse('True')
True
PS> [bool]::Parse('Not True')
MethodInvocationException: Exception calling "Parse" with "1" argument(s):
"String 'Not True' was not recognized as a valid Boolean."
Konwertowanie z typów kolekcji
Tablice są najczęściej spotykanym typem kolekcji w programie PowerShell. Te reguły dotyczą dowolnych typów podobnych do kolekcji, które implementują interfejs IList .
- Puste kolekcje są zawsze
$false
- Specjalna wartość null wskazująca brak danych wyjściowych polecenia
[System.Management.Automation.Internal.AutomationNull]::Value
to zawsze$false
. - Kolekcje pojedynczego elementu są obliczane na wartość logiczną ich jednego i jedynego elementu.
- Kolekcje z więcej niż 1 elementem są zawsze
$true
.
Przykłady:
# Empty collections
PS> [bool]@()
False
PS> [bool](Get-ChildItem | Where-Object Name -eq 'Non-existent-File.txt')
False
# Single-element collections
PS> $a = @(0)
PS> [bool]$a
False
PS> $b = @(1)
PS> [bool]$b
True
# Multi-element collections
PS> $c = @(0,0)
PS> [bool]$c
True