プロパティパスは、コンテナオブジェクト内のプロパティの場所を示す文字列です。
プロパティパスを使用して、特定のパスにあるオブジェクトのデータを取得または設定したり、オブジェクトのサブプロパティのビジターを受け入れたりすることができます。
プロパティパスは文字列で構成され、ルートオブジェクトから特定のプロパティインスタンスを解決します。例えば、パス foo.bar.baz[12] は、foo コンテナにネストされている、bar コンテナの baz リストコンテナの 13 番目の要素を解決します。
プロパティパスを作成および操作するには、Unity.Properties.PropertyPath クラスを使用します。
プロパティパスを使用して、以下を行うことができます。
Unity.Properties.PropertyPath は不変の構造体型です。プロパティパスを文字列から構成すると、サブ文字列を抽出するためにアロケーションが発生します。
以下の表は、プロパティパスが文字列から構成されている場合のアロケーション動作のリストです。
| 文字列 | 長さ | アロケーション回数 | アロケーションの理由 |
|---|---|---|---|
"Path" |
1 | 0 | 文字列をそのまま使用します。 |
"Path.To" |
2 | 2 | 文字列を 2 つのパーツに分割します。 |
"Path.To[2]" |
3 | 3 | 文字列を 2 つのパーツに分割し、インデックスを抽出します。 |
"Path.To[2].My" |
4 | 4 | |
"Path.To[2].My.Value" |
5 | 6 | 追加パーツの配列を割り当てます。 |
以下の表は、プロパティパスがパーツで構成される場合のアロケーション動作のリストです。
| 文字列 | 長さ | アロケーション回数 | アロケーションの理由 |
|---|---|---|---|
PropertyPath.FromName("Path") |
1 | 0 | |
PropertyPath.AppendName(previous, "To") |
2 | 0 | |
PropertyPath.AppendIndex(previous, 2) |
3 | 0 | |
PropertyPath.AppendName(previous, "My") |
4 | 0 | |
PropertyPath.AppendName(previous, "Value") |
5 | 1 | 追加パーツの配列を割り当てます。 |
パフォーマンスを最適化し、メモリの割り当てを回避するには、以下を行います。