Enum→int универсальное приведение в упакованных коллекциях

В моей ситуации мне нужно хранить объекты словаря типа Dictionary<SomeEnum, string> в переменной object. SomeEnum — это всегда другой тип, а базовый тип — это int. С другой стороны, мне нужно преобразовать объект в IDictionary<int, string>, но после двух дней раздумий ничего не получилось. Позвольте мне показать какой-то пример:

enum Things: int {A, B, C}
//few lines are skipped
IDictionary<Things, string> dict = new Dictionary<Things, string>(){
{Things.A, "A"},
{Things.B, "B"},
{Things.C, "C"}};
object a = dict;
var b = a as IDictionary<System.Enum, string>; //not working
var c = a as IDictionary<int, string>; //not working too
var d = a as IDictionary<object, string>; //at least we tried

Что я делаю неправильно? Даже IDictionary<KeyValuePair<System.Enum, string>> не работает.


person Troll the Legacy    schedule 13.09.2018    source источник
comment
Возможный дубликат Enum как ключи словаря   -  person Mate    schedule 13.09.2018


Ответы (1)


IDictionary имеет только параметры инвариантного типа. Вам действительно нужно создать новый словарь, скопировав все. Или вы создаете оболочку, которая может искать ключ, преобразованный в ваше перечисление.

person Joey    schedule 13.09.2018