2010-07-23 32 views
11

Tôi muốn sử dụng HashSet trong tập lệnh PowerShell. Tôi nghĩ rằng tôi đã tìm ra cách để nhanh chóng đối tượng bộ sưu tập chung bằng cách thực hiện:Tôi có thể sử dụng System.Core.dll/System.Collections.Generic.HashSet trong powershell không?

[type] $strType = "string" 
$listClass = [System.Collections.Generic.List``1] 
$listObject = $base.MakeGenericType(@($t)) 
$myList = New-Object $setObject 

này hoạt động tốt cho các danh sách và từ điển, nhưng khi tôi cố gắng tạo ra một HashSet tôi nhận được:

Unable to find type [System.Collections.Generic.HashSet`1]: make sure that the assembly containing this type is loaded. 

Vì vậy, có vẻ như bây giờ tôi cần phải tải System.Core.dll nhưng tôi dường như không thể có được sức mạnh để tải lắp ráp đó. Ví dụ gọi [System.Reflection.Assembly] :: LoadWithPartialName ("System.Core") gây ngoại lệ này:

"LoadWithPartialName" with "1" argument(s): "Could not load file or assembly 'System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The system cannot find the file specified." 

Bất kỳ con trỏ?

+0

là bạn trong PowerShell v1 hoặc v2? – x0n

+0

Tôi đang sử dụng Win2k8 R2 và máy chủ lưu trữ nói phiên bản 2.0 – nick

+2

Có thể trùng lặp: Xem câu trả lời cho http://stackoverflow.com/questions/184476/powershell-generic-collections – zdan

Trả lời

21

PowerShell 2.0 làm điều này bằng cách 1 dễ dàng hơn) thêm Add-Type cmdlet xếp dỡ lắp ráp và 2) cập nhật các cú pháp để thực hiện việc chỉ định một đóng chung tên loại ví dụ đơn giản:

PS> Add-Type -AssemblyName System.Core 
PS> $h = new-object 'System.Collections.Generic.HashSet[string]' 
PS> $h.Add('f') 
True 
+0

Hoạt động tuyệt vời - cảm ơn. – nick

+0

Sau đó tôi có thể chỉ định kiểu tham số trong các hàm bằng cách thực hiện '[Parameter (Mandatory = $ true)] [hashset]'? –

+2

Có nhưng bạn cần phải xác định kiểu tham số là '[Collections.Generic.HashSet [string]]' thay thế cho chuỗi kiểu bạn cần lưu trữ trong bộ băm. –

Các vấn đề liên quan