次の方法で共有


about_Ref

簡単な説明

参照型変数を作成して使用する方法について説明します。 参照型変数を使用すると、渡される変数の値を関数で変更できます。

長い説明

変数は、 参照 または 値によって関数に渡すことができます。

変数を値渡しすると、データのコピーが渡されます。

次の例では、関数は渡された変数の値を変更します。 PowerShell では、整数は値型であるため、値渡しされます。 したがって、 の $var 値は関数の範囲外で変更されません。

Function Test($data)
{
    $data = 3
}

$var = 10
Test -data $var
$var
10

次の例では、 を含む Hashtable 変数が関数に渡されます。 Hashtable はオブジェクト型であるため、既定では 参照によって関数に渡されます。

変数を参照渡しする場合、関数はデータを変更でき、その変更は関数の実行後も保持されます。

Function Test($data)
{
    $data.Test = "New Text"
}

$var = @{}
Test -data $var
$var
Name                           Value
----                           -----
Test                           New Text

関数は、関数のスコープ外に保持される新しいキーと値のペアを追加します。

参照パラメーターを受け入れる関数の記述

渡されるデータの種類に関係なく、パラメーターを参照として受け取るように関数をコーディングできます。 これには、パラメーターの型を 、、または [ref]としてSystem.Management.Automation.PSReference指定する必要があります。

参照を使用する場合は、 型の プロパティをValueSystem.Management.Automation.PSReference使用してデータにアクセスする必要があります。

Function Test([ref]$data)
{
    $data.Value = 3
}

参照を必要とするパラメーターに変数を渡すには、変数を参照として型キャストする必要があります。

注意

角かっことかっこは両方とも必須です。

$var = 10
Test -data ([ref]$var)
$var
3

.NET メソッドへの参照の渡し

一部の .NET メソッドでは、変数を参照として渡す必要があります。 メソッドの定義でパラメーターにキーワード in、、 outまたは ref を使用する場合は、参照が必要です。

[int] | Get-Member -Static -Name TryParse
Name     MemberType Definition
----     ---------- ----------
TryParse Method     static bool TryParse(string s, [ref] int result)

メソッドは TryParse 、文字列を整数として解析しようとします。 メソッドが成功すると、 が返 $trueされ、結果は 参照渡しで渡された変数に格納されます。

PS> $number = 0
PS> [int]::TryParse("15", ([ref]$number))
True
PS> $number
15

参照とスコープ

参照を使用すると、親スコープ内の変数の値を子スコープ内で変更できます。

# Create a value type variable.
$i = 0
# Create a reference type variable.
$iRef = [ref]0
# Invoke a scriptblock to attempt to change both values.
&{$i++;$iRef.Value++}
# Output the results.
"`$i = $i;`$iRef = $($iRef.Value)"
$i = 0;$iRef = 1

参照型の変数のみが変更されました。

こちらもご覧ください