Мне интересно, есть ли способ перезаписать класс Hashtable (или Dictionary), чтобы он автоматически выполнял операции упаковки / распаковки объектов. Другими словами:
myHashtable["value1"] = "this_is_string";
myHashtable["value2"] = 123;
string a = myHashtable["value1"];
int b = myHashtable["value2"];
// errors as expected, since i need to cast it to specific type from object
И, очевидно, C # не допускает перезаписи public T этого [object key] оператора с различными типами, так как я пытался сделать что-то вроде этого:
public int this[object key] { get { return (base[key] as int); } set {} } // etc
public string this[object key] { get { return (base[key] as string); } set {} } // etc
// error
Любые идеи или советы, как проще всего (если есть) избегать приведения при использовании ассоциативных массивов в C # (нет необходимости строго использовать Hashtable)? И если нет способа сделать это, я был бы признателен, если бы кто-то более знающий, чем я, объяснил, почему это так и каковы основные принципы этого.
Спасибо.
Изменить:
Мне это нужно, потому что я создаю собственный класс настроек. Настройки могут иметь разные типы значений, например, скажем, «HowManyItemsToDisplay» будет иметь некоторое целочисленное значение, а «NameOfSomeControl» будет строкой. Поэтому было бы неплохо избегать кастинга при написании чего-то вроде:
myControl.Text = MySettings["SomeTextValue"];
или
while (MySettings["SomeIntValue"] > 0) { .. }