Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Program PowerShell umożliwia używanie przypisań w wyrażeniach przez dołączenie przypisania w nawiasach (). Program PowerShell przekazuje przypisaną wartość za pośrednictwem. Na przykład:
# In an `if` conditional
if ($foo = Get-Item $PROFILE) { "$foo exists" }
# Property access
($profileFile = Get-Item $PROFILE).LastWriteTime
# You can even *assign* to such expressions.
($profileFile = Get-Item $PROFILE).LastWriteTime = Get-Date
Uwaga
Chociaż ta składnia jest dozwolona, nie zaleca się używania jej. Istnieją przypadki, w których nie działa to, a intencja autora kodu może być myląca dla innych recenzentów kodu.
Ograniczenia
Przypadek przypisania nie zawsze działa. Gdy to nie zadziała, przypisanie zostanie odrzucone. Jeśli utworzysz wystąpienie typu wartości modyfikowalnej i spróbujesz zapisać wystąpienie w zmiennej i zmodyfikować jedną z jego właściwości w tym samym wyrażeniu, przypisanie właściwości zostanie odrzucone.
# create mutable value type
PS> Add-Type 'public struct Foo { public int x; }'
# Create an instance, store it in a variable, and try to modify its property.
# This assignment is effectively IGNORED.
PS> ($var = [Foo]::new()).x = 1
PS> $var.x
0
Różnica polega na tym, że nie można zwrócić odwołania do wartości. ($var = [Foo]::new()) Zasadniczo element jest odpowiednikiem $($var = [Foo]::new(); $var). Nie wykonujesz już dostępu do składowej w zmiennej, do której uzyskujesz dostęp członkowski w danych wyjściowych zmiennej, która jest kopią.
Obejście polega na utworzeniu wystąpienia i zapisaniu go w zmiennej, a następnie przypisaniu do właściwości za pomocą zmiennej:
# create mutable value type
PS> Add-Type 'public struct Foo { public int x; }'
# Create an instance and store it in a variable first
# and then modify its property via the variable.
PS> $var = [Foo]::new()
PS> $var.x = 1
PS> $var.x
1