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

Zobacz też