Converti un HashSet < T > a un array in .NET
Domanda
Come posso convertire un HashSet < T > a un array in .NET?
Soluzione
Utilizza HashSet < T > .CopyTo
metodo. Questo metodo copia gli elementi da HashSet < T >
a un array.
Quindi dato un HashSet < String >
chiamato stringSet
faresti qualcosa del genere:
String[] stringArray = new String[stringSet.Count];
stringSet.CopyTo(stringArray);
Altri suggerimenti
Se intendi System.Collections.Generic.HashSet, è un po 'difficile dato che quella classe non esiste prima del framework 3.5.
Se vuoi dire che sei su 3.5, usa ToArray poiché HashSet implementa IEnumerable, ad esempio
using System.Linq;
...
HashSet<int> hs = ...
int[] entries = hs.ToArray();
Se hai la tua classe HashSet, è difficile dirlo.
Suppongo
function T[] ToArray<T>(ICollection<T> collection)
{
T[] result = new T[collection.Count];
int i = 0;
foreach(T val in collection)
{
result[i++] = val;
}
}
come per qualsiasi ICollection < T >
.
In realtà, poiché è necessario fare riferimento a System.Core
per utilizzare la classe HashSet < T >
, è possibile utilizzarla anche:
T[] myArray = System.Linq.Enumerable.ToArray(hashSet);
Ora puoi farlo ancora più semplice, con il costruttore Elenco < T >
(gli elenchi sono array moderni :).
Ad esempio, in PowerShell:
$MyNewArray = [System.Collections.Generic.List[string]]::new($MySet)