0

PSObjectのメンバーである配列の要素であると思ったものを削除しようとしています。

$obj = New-Object psobject
$obj | Add-Member -MemberType NoteProperty -Name member -Value @()
$obj.member += $null
$obj.member[0] = "A"
$obj.member += $null
$obj.member[1] = "B"

ここまでは順調ですね。$ obj.memberは、個々の要素を呼び出し、-joinを使用して文字列に変換できるという点で配列のように動作します。ただし、要素を削除しようとすると、$obj.memberが配列ではないことがわかります。$ obj.member | gmは、それが文字列であることを通知し、$ obj.member.removeRange()を呼び出すと、次のエラーが発生します。[System.Object[]]に「removeRange」という名前のメソッドが含まれていません。

つまり、文字列のように見え、配列のように動作し、実際にはオブジェクトです。

オブジェクトのNoteProperty型メンバーの値を@()として定義すると、そのメンバーは配列になるという印象を受けました。明らかにこれは正しくありませんが、参加できたため、私には思いもよらなかったのです。要素。

ここで何が起こっているのか説明してください。

最終的には、オブジェクトメンバーを配列にしようとしているので、要素を追加および削除できます。

ありがとう!!

4

1 に答える 1

2

メンバーを適切に追加しており、それは確かに配列です。

$ obj.member | gmはそれが文字列だと教えてくれます

コレクションを展開し、コレクション自体ではなく、コレクションGet-Memberのオブジェクトに関する情報を表示するためのパイプ。たとえば、タイプのメンバーについて教えてください。コレクション自体について知りたい場合は、次のように行うことができます。1,2,3 | gmint

,(1,2,3) | gm
,$obj.Member | gm

$ obj.member.removeRange()を呼び出すと、エラーが発生します

RemoveRangeこれは、にパイプするときにわかるように、配列型にメソッドがないためgmです。こちらのドキュメントも参照してSystem.Array ください

于 2012-12-21T23:22:58.063 に答える