2011年10月27日木曜日

◆ジェネリックなクラスを使う

PowerShellはもともと厳密な型指定を要求されるわけではないのでジェネリックなクラスが必要になることはあまり無いように思う。

しかし、最近ではジェネリックなクラスでしか提供されない機能もある。
そこで、簡単にその使い方を調べてみた。

ジェネリックの代表格「List」の使い方はこんな感じのようだ。

001
002
003
004
005
006
007
008
009

$genericList = 
   
'System.Collections.Generic.List`1[System.String]'
$list = New-Object 
$genericList
$list2
 = New-Object 
$genericList
$list
.Add("test1")
$list.Add("test2")
$list2.Add("test0")
$list2.AddRange($list)
$list2

Listのクラス名に続けて型パラメータの型を指定してあげる。
指定は文字列になるようだ。
(`1)は型パラメータの個数を指定しているものと思われる。

型パラメータが2個の場合は、xxxxx`2[System.String,System.String]
といった形だろうか。

結果を見るととりあえずOKそう。
image

ただし、このパターンで簡単に使えるのはmscorlibのジェネリッククラスだけで、それ以外はちょっと面倒臭そう。
一応以下にサンプルが載っていたので使えるには使えたが、余程のことが無い限り使うことは無い気がする。
.net - Powershell Generic Collections - Stack Overflow

また、PowerShellクックブックにジェネリックなクラスを使うための関数が載っているのでいざというときは参考にすると良いかも。
Creating Generic Types in PowerShell | Precision Computing

V3を眺めているとジェネリックというキーワードもちらほら見えるのでV3では簡単に使えるようになるのだろうか・・・。


もう少し簡単に以下のようにインスタンシングできるようだ。

>$list = New-Object System.Collections.Generic.List[string]

0 件のコメント:

コメントを投稿