Преобразование HashSet <T> в массив в .NET.

Как мне преобразовать HashSet <T> к массиву в .NET?

Ответ 1

Используйте метод HashSet<T>.CopyTo. Этот метод копирует элементы из HashSet<T> в массив.

Таким образом, для a HashSet<String>, называемого stringSet, вы сделали бы что-то вроде этого:

String[] stringArray = new String[stringSet.Count];
stringSet.CopyTo(stringArray);

Ответ 2

Если вы имеете в виду System.Collections.Generic.HashSet, это сложно, поскольку этот класс не существует до фреймворка 3.5.

Если вы имеете в виду, что вы на 3.5, просто используйте ToArray, поскольку HashSet реализует IEnumerable, например.

using System.Linq;
...
HashSet<int> hs = ...
int[] entries = hs.ToArray();

Если у вас есть собственный класс HashSet, трудно сказать.

Ответ 3

Думаю,

function T[] ToArray<T>(ICollection<T> collection)
{
    T[] result = new T[collection.Count];
    int i = 0;
    foreach(T val in collection)
    {
        result[i++] = val;
    }
}

как для любой реализации ICollection<T>.

Фактически на самом деле, поскольку вы должны ссылаться на System.Core, чтобы использовать класс HashSet<T>, вы также можете его использовать:

T[] myArray = System.Linq.Enumerable.ToArray(hashSet);