Delen via


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

Zie ook