about_Booleans
Korte beschrijving
Beschrijft hoe Booleaanse expressies worden geëvalueerd.
Lange beschrijving
PowerShell kan elk type impliciet behandelen als een Booleaanse waarde. Het is belangrijk om inzicht te hebben in de regels die PowerShell gebruikt om andere typen te converteren naar Booleaanse waarden.
Converteren van scalaire typen
Een scalair type is een atomische hoeveelheid die slechts één waarde tegelijk kan bevatten. De volgende typen worden geëvalueerd als $false
:
- Lege tekenreeksen zoals
''
of""
- Null-waarden zoals
$null
- Elk numeriek type met de waarde van
0
Voorbeelden:
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
De volgende typen worden geëvalueerd als $true
:
- Niet-lege tekenreeksen
- Exemplaren van een ander niet-verzamelingstype
Voorbeelden:
# a non-collection type
PS> [bool]@{value = 0}
True
# non-empty strings
PS> if ('hello') { $true } else { $false }
True
PS> [bool]'False'
True
Houd er rekening mee dat dit verschilt van expliciet parseren van tekenreeksen:
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."
Converteren van verzamelingstypen
Matrices zijn het meest voorkomende verzamelingstype in PowerShell. Deze regels zijn van toepassing op alle typen die lijken op verzamelingen die de IList-interface implementeren.
- Lege verzamelingen zijn altijd
$false
- De speciale null-waarde die de afwezigheid van uitvoer van een opdracht aangeeft,
[System.Management.Automation.Internal.AutomationNull]::Value
is altijd$false
. - Verzamelingen met één element evalueren naar de Booleaanse waarde van hun enige element.
- Verzamelingen met meer dan 1 element zijn altijd
$true
.
Voorbeelden:
# 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