5
У меня есть функцию PowerShell следующим образом:HashSet в Powershell: Коллекция была фиксированного размера
Function GetAllIdentityProvidersFromDatabase {
param (
[string] $SQLConnectionSting
)
$AllIdPIdentifiers = New-Object 'System.Collections.Generic.HashSet[string]'
$SQLConnect = new-object system.data.sqlclient.sqlconnection $SQLConnectionSting
try {
$SQLQuery = $("SELECT [IdPIdentifier] FROM [dbo].[IdPs]")
$SQLConnect.Open()
$command = New-object system.data.sqlclient.SqlCommand
$command.connection = $SQLConnect
$command.CommandText = $SQLQuery
$Reader = $command.ExecuteReader()
while ($Reader.Read()) {
$value = $Reader.GetValue($1)
$AllIdPIdentifiers.Add($value) | Out-Null
}
$AllIdPIdentifiers
} catch {
Write-Host "SQL Select error: " $Error[0].ToString() -ForegroundColor Red
} finally {
$SQLConnect.Close()
}
}
Затем в другой сценарий:
$AllIdPIdentifiers = New-Object 'System.Collections.Generic.HashSet[string]'
$AllIdPIdentifiers = GetAllIdentityProvidersFromDatabase $SQLConnectionString
$AllIdPIdentifiers.Remove("GodspeedYou")
Write-Host $AllIdPIdentifiers.Count
И, выполнив его, у меня есть эта ошибка:
Exception calling "Remove" with "1" argument(s): "Collection was of a fixed size."
At C:\PowerShell\EduGain\FederationMetadataExtractor.ps1:151 char:1
+ $AllIdPIdentifiers.Remove("GodspeedYou")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : NotSupportedException
Есть ли способ разрешить Remove
работа?
'GetAllIdentityProvidersFromDatabase' возвращает не' HashSet', а 'string', который будет упакован в массив, если более одного. И массивы фиксированного размера. – PetSerAl
@PetSerAl: при условии, что вы правы, было бы полезно, если бы вы уточнили, что _why_ функция возвращает массив объектов 'string'. Учитывая, что функция, как представляется, оценивает значение '$ AllIdPIdentifiers' и ссылается на объект' HashSet ', мое наивное чтение кода заключается в том, что сама функция вернет объект' HashSet '. Есть ли способ заставить функцию PowerShell возвращать фактический объект 'HashSet ', если не код, показанный OP? –
Невозможно ли заполнить HashSet вместо массива, используя возвращаемое значение моей функции? Это необходимо для использования структуры данных, которая минимизирует усилия по операциям «Содержит» и «Удалить». – vdenotaris