about_Booleans

Kort beskrivning

Beskriver hur booleska uttryck utvärderas.

Lång beskrivning

PowerShell kan implicit behandla alla typer som booleska. Det är viktigt att förstå de regler som PowerShell använder för att konvertera andra typer till booleska värden.

Konvertera från skalärtyper

En skalär typ är en atomisk kvantitet som bara kan innehålla ett värde i taget. Följande typer utvärderas till $false:

  • Tomma strängar som '' eller ""
  • Null-värden som $null
  • Valfri numerisk typ med värdet för 0

Exempel:

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

Följande typer utvärderas till $true:

  • Icke-tomma strängar
  • Instanser av andra typer av icke-samlingstyper

Exempel:

# a non-collection type
PS> [bool]@{value = 0}
True
# non-empty strings
PS> if ('hello') { $true } else { $false }
True
PS> [bool]'False'
True

Observera att detta skiljer sig från explicit strängparsning:

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."

Konvertera från samlingstyper

Matriser är den vanligaste samlingstypen i PowerShell. Dessa regler gäller för alla samlingsliknande typer som implementerar IList-gränssnittet .

  • Tomma samlingar är alltid $false
  • Det särskilda null-värdet som anger frånvaron av utdata från ett kommando [System.Management.Automation.Internal.AutomationNull]::Value är alltid $false.
  • Enelementssamlingar utvärderas till det booleska värdet för sitt enda element.
  • Samlingar med fler än 1 element är alltid $true.

Exempel:

# 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

Se även