Udostępnij za pośrednictwem


about_Booleans

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 ilość niepodzielna, która może przechowywać tylko jedną wartość jednocześnie. Następujące typy są obliczane na 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 są obliczane na wartość $true:

  • Niepuste ciągi
  • 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ą wszystkich 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ą 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ż