Вероятно, стоит отметить, что вам следует отступить и спросить себя, действительно ли вам нужны элементы, хранящиеся в списке со случайным индексированным доступом, или вам просто нужно время от времени перечислять каждый из ключей или значений.
Вы можете легко перебрать ICollection MyDictionary.Values.
foreach (int item in dict.Values) { dosomething(item); }
В противном случае, если вам действительно нужно сохранить его как IList, нет ничего особенно неэффективного в копировании всех элементов; это просто операция O (n). Если вам не нужно делать это так часто, зачем волноваться? Если вас раздражает написание кода для этого, используйте:
IList<int> x=new List<int>(dict.Values);
, который упаковывает код, который вы пишете, в конструктор копирования, который уже реализует код, который вы планировали написать. Это эффективно для строк кода, что, вероятно, то, что вы действительно заботитесь; это не более эффективное пространство или время, чем то, что вы написали бы.