PowerShell generic collections

后端 未结 3 1542
旧时难觅i
旧时难觅i 2020-12-01 01:48

I have been pushing into the .NET framework in PowerShell, and I have hit something that I don\'t understand. This works fine:

$foo = New-Object \"System.Col         


        
相关标签:
3条回答
  • 2020-12-01 01:56

    In PowerShell 2.0 the new way to create a Dictionary is:

    $object = New-Object 'system.collections.generic.dictionary[string,int]'
    
    0 讨论(0)
  • 2020-12-01 02:10

    There are some issues with Generics in PowerShell. Lee Holmes, a dev on the PowerShell team posted this script to create Generics.

    0 讨论(0)
  • 2020-12-01 02:16

    Dictionary<K,V> is not defined in the same assembly as SortedDictionary<K,V>. One is in mscorlib and the other in system.dll.

    Therein lies the problem. The current behavior in PowerShell is that when resolving the generic parameters specified, if the types are not fully qualified type names, it sort of assumes that they are in the same assembly as the generic type you're trying to instantiate.

    In this case, it means it's looking for System.String in System.dll, and not in mscorlib, so it fails.

    The solution is to specify the fully qualified assembly name for the generic parameter types. It's extremely ugly, but works:

    $bar = new-object "System.Collections.Generic.Dictionary``2[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"
    
    0 讨论(0)
提交回复
热议问题