Generic list and powershell
I met with an accident recently riding my motorcycle and hence was unable to blog for some time. Here is my post after a brief break.
I wanted to create a generic list of my class in power shell. It was an interesting experience. Here is what I found.
When I tried to create a generic list of say type int it was straight forward ... well sort of ... the syntax was awkward, but still worked.
$list = New-Object "System.Collections.Generic.List``1[System.Int32]"
$list.Add(3)
$list
I wrote a sample assembly as below:
using System;
public class Sample
{
public Sample() {}
public void SampleMethod() { Console.WriteLine("Hello");}
}
Compiled this to sample.dll as csc /target:library sample.cs
[Reflection.Assembly]::LoadFrom("c:\Sample\Sample.dll")
Make sure if the assembly is loaded
[System.AppDomain]::CurrentDomain.GetAssemblies()
Now add the class Sample to the list. It gave me the error below.
$list = New-Object "System.Collections.Generic.List``1[Sample]"
New-Object : Cannot find type [System.Collections.Generic.List`1[Test]]: make sure the assembly containing this type is loaded.
At line:1 char:19 + $list = New-Object <<<< "System.Collections.Generic.List``1[Test]"
I am not sure why this is not working as the syntax is very similar to the one I had above for Int32. After some search and experimenting I figured out another way to get the generic list working.
$si = new-object Sample
$st = [Type] $si.GetType()
$base = [System.Collections.Generic.List``1]
$qt = $base.MakeGenericType(@($st))
$so = [Activator]::CreateInstance($qt)
$so.Add($si)
write-host $so
Sample
$so[0].SampleMethod()
Hello
Comments
Anonymous
October 14, 2009
Man, hope you're OK. I am also riding a bike and other people simply don't see us on the road. Nice post, will bookmark it for future reference.Anonymous
April 10, 2013
Very good post, simple and effective !!