2017-01-24 26 views
8

Sadece [System.Collections.ArrayList] den diyelim ki, basit bir özel tip yapmak böyle sadece kısa [arrayList] falan ister ve rahatlığı için modülün koydu. Add-Type'a baktı, ancak uyup uymadığını ve tam olarak nasıl yapılacağını anlayamadı. Ne almak istiyorum:Powershell'de özel türler oluşturmanın basit bir yolu var mı?

[ArrayList]<-[System.Collections.ArrayList] #Something like that 
$myArList=New-Object ArrayList 
$myArList.Add(1,2,3) 

cevap

9

Bir type accelerator için arıyorsunuz.

[accelerators]::add('arrayList','System.Collections.ArrayList') 

Standart olmayan hızlandırıcıları kullanmaktan kaçınırım. PowerShell, sınıflar için en az v3 olduğundan iyi sekme tamamlama desteğine sahiptir.

[arraylTAB yazarsanız tam adı sizin için tamamlanır.

Ryan Bemrose büyük noktaya kadar getirdi ; [accelerators] tipi hızlandırıcı varsayılan olarak kullanılabilir değildir, ancak bunu gibi oluşturabilirsiniz:

$acc = [psobject].assembly.gettype("System.Management.Automation.TypeAccelerators") 
$acc::Add('accelerators', $acc) 
+3

'[hızlandırıcılar]' hızlandırıcı, benim PS varsayılan olarak etkin değildir gerçi Bunu $ acc = [psobject] .assembly.gettype ("System.Management.Automation.TypeAccelerators") ile ekleyebilirim); $ acc :: Ekle ('hızlandırıcı', $ acc) ' –

8

sadece yeniden yazarak System.Collections.ArrayList her zaman kaçınmak istiyorsanız, sadece bir değişkene değişmez bir tür atayabilirsiniz ve v5.0 new() kurucuyu kullanarak,

$ListType = [System.Collections.ArrayList] 
$MyArrayList = New-Object $ListType 
# more code 
$AnotherArrayList = New-Object $ListType 

ya: kullanan

$MyArrayList = $ListType::new() 
+1

Oh evet, bunu da seviyorum. – briantist

İlgili konular