Domanda

Come posso convertire un HashSet < T > a un array in .NET?

È stato utile?

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)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top