5
Mam PowerShell funkcję w następujący sposób:HashSet w PowerShell: Kolekcja było stałej wielkości
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()
}
}
Następnie w innym skrypcie:
$AllIdPIdentifiers = New-Object 'System.Collections.Generic.HashSet[string]'
$AllIdPIdentifiers = GetAllIdentityProvidersFromDatabase $SQLConnectionString
$AllIdPIdentifiers.Remove("GodspeedYou")
Write-Host $AllIdPIdentifiers.Count
A wykonując go, mam ten błąd:
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
Czy istnieje sposób, aby zezwolić na Remove
operacja?
'GetAllIdentityProvidersFromDatabase' zwraca nie' HashSet', ale 'string's, który zostanie spakowany w tablicy, jeśli jest więcej niż jeden. A tablice mają stały rozmiar. – PetSerAl
@PetSerAl: zakładając, że masz rację, byłoby pomocne, gdybyś opracował na _ dlaczego ta funkcja zwraca tablicę obiektów 'string'. Zważywszy, że funkcja wydaje się oceniać na wartość '$ AllIdPIdentifiers' i odwołuje się do obiektu' HashSet ', moje naiwne odczytywanie kodu jest takie, że sama funkcja zwróci obiekt' HashSet '. Czy istnieje sposób, aby funkcja PowerShell zwróciła rzeczywisty obiekt 'HashSet ', jeśli nie jest to kod pokazany w OP? –
Czy nie można wypełnić obiektu HashSet zamiast tablicy przy użyciu zwróconej wartości funkcji? Ma to na celu wykorzystanie struktury danych, która minimalizuje nakład pracy w operacjach "Zawiera" i "Usuwa". – vdenotaris