Если ключ / значение в словаре содержит индекс в массиве, в который вы хотите поместить значение, вы можете просто перебрать словарь и вставить значение в конкретный индекс.
Dictionary<int, string> keyValuePairs = new Dictionary<int, string>();
string[] arr = new string[keyValuePairs.Count];
foreach (KeyValuePair<int, string> item in keyValuePairs)
arr[item.Key] = item.Value;
Если выиметь индексы, которые не увеличиваются равномерно, как подсказывает @TanvirArjel - сначала вы должны найти максимальный индекс, который будет означать замену второй строки следующим:
string[] arr = new string[keyValuePairs.Keys.Max() + 1];
В отношении скорости, всегда лучше использовать не ленивое программирование иопределите ваши типы .. вы получите меньшее увеличение производительности по сравнению с использованием vars при итерации (вспомогательный аргумент ниже).
Здесь есть отличная статья Microsoft здесь , сравнивающаяспособы итерации и их скорость по словарям.