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 (2)

  1. Alex O. says:

    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.

  2. Very good post, simple and effective !!

Skip to main content