Я создаю объект «Настройки» в своем приложении, который используется для хранения пользовательских настроек и прочего. Я планирую использовать различные типы данных для своих полей настройки (целые числа, строки, перечисления, все, что угодно Serializable, правда).
Я бы также хотел, если это возможно, безопасный тип настройки любых настроек. Мой предложенный метод будет делать что-то вроде этого:
Tuple<string, Type> SettingName = new Tuple<string, Type>("NumberOfFoos",
typeof(**TYPE**));
public void Set(Tuple<string, Type> key, **TYPE** value) { /* Stuff */ }
Кортеж фактически будет «настройкой», к которой пользователь будет подталкивать значение, и будет состоять из ключа для этого параметра, а также типа этого параметра. Мне интересно, есть ли способ заставить компилятор принудительно установить, что в методе Set()
тип value
имеет тот же тип, что и тип объекта, сохраненный в кортеже, переданном в Set()
? Возможно ли то, что я предложил, даже возможно? Спасибо!
РЕДАКТИРОВАТЬ: Я подумал о некоторых вещах, которые я должен уточнить.
1) Это статический класс, поэтому я не смогу сериализовать весь класс, только его членов. Поэтому мне бы очень не хотелось иметь дело с сериализацией для каждого поля. Я планировал сохранить все значения настроек в Dictionary<string, **TYPE**>
и сериализовать их.
2) Определения Tuple
должны быть постоянными и статичными. Я действительно воспринимаю их как нечто типа typedef (мне действительно нужно создать свою собственную структуру SettingKey), которую пользователь передает на Set
, чтобы указать, какое поле они меняют. Параметр Type предназначен для принудительного применения параметра value
указанного типа.