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 指定する必要があります。
参照を使用する場合は、型の System.Management.Automation.PSReference プロパティを使用 Value してデータにアクセスする必要があります。
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
参照型の変数のみが変更されました。
関連項目
フィードバック
フィードバックの送信と表示