Преобразование значений словаря в массив

Каков наиболее эффективный способ превратить список значений словаря в массив?

Например, если у меня есть Dictionary, где Key есть String и Value is Foo, я хочу получить Foo[]

Я использую VS 2005, С# 2.0

Ответ 1

// dict is Dictionary<string, Foo>

Foo[] foos = new Foo[dict.Count];
dict.Values.CopyTo(foos, 0);

// or in C# 3.0:
var foos = dict.Values.ToArray();

Ответ 2

Сохраните его в списке. Это проще,

List<Foo> arr = new List<Foo>(dict.Values);

Конечно, если вы специально хотите его в массиве,

Foo[] arr = (new List<Foo>(dict.Values)).ToArray();

Ответ 3

Существует функция ToArray() для значений:

Foo[] arr = new Foo[dict.Count];    
dict.Values.CopyTo(arr, 0);

Но я не думаю, что он эффективен (я действительно не пробовал, но, я думаю, он копирует все эти значения в массив). Вам действительно нужен массив? Если нет, я бы попытался передать IEnumerable:

IEnumerable<Foo> foos = dict.Values;

Ответ 4

Если вы хотите использовать linq, чтобы вы могли попробовать следующее:

Dictionary<string, object> dict = new Dictionary<string, object>();
var arr = dict.Select(z => z.Value).ToArray();

Я не знаю, какой из них быстрее или лучше. Оба работают для меня.