В настоящее время я работаю над системой для хранения и извлечения данных из мастер-класса словаря. Представьте себе что-то вроде этого:
public class Manager {
Dictionary<string, Category> _categories;
public T GetValue<T>(string category, string id){
return _categories[category].GetValue<T>(id);
}
}
public class Category {
Dictionary<string, Category> _subCategories;
// How could I approach something like this?
Dictionary<T, Dictionary<string, IElementExample<T>> _categoryDict;
public T GetValue<T>(string id){
if (_categoryDict.ContainsKey(T)){
return _categoryDict[T][id];
}
return default(T);
}
public SetValue<T>(string id, T value){
if (_categoryDict.ContainsKey(T)){
if (_categoryDict[T].ContainsKey(id)){
_categoryDict[T][id] = value;
} else {
_categoryDict[T].Add(id, value);
}
} else {
_categoryDict.Add(T, new Dictionary<string, IElementExample<T>>());
_categoryDict[T].Add(id, value);
}
}
}
//
public interface IElementExample<T> {
T Value {get;set;}
string Id {get;set;}
string Comment{get;set;}
string Serialize();
void Deserialize(string serial);
}
public class StringElement : IElementExample<string> {
string m_value;
string m_id;
string m_comment;
string Value { get { return m_value; }}
string Id { get { return m_id; }}
string Comment { get { return m_comment; }}
string Serialize(){
}
void Deserialize(){
}
}
Меня сбивает с толку то, что на самом деле я не могу получить Dictionary<T, Dictionary<string, IElementExample<T>>
. У кого-нибудь есть мысли о том, как я смогу достичь чего-то подобного?
Целью здесь является создание мастер-места, где может храниться много данных (для переменных конфигурации игры), которые затем я буду сериализовывать / десериализовывать в / из XML. У меня уже есть кое-что, что работает для этого, и это прекрасно работает, но невозможно добавить поддержку новых типов данных без редактирования классов Manager / Category для добавления поддержки (на данный момент вместо GetValue это GetString / GetFloat / GetInt / GetBool / GetVector3 ... и т. Д.).
Я могу убедиться, что он действительно работает только с классами, предназначенными для работы с ним, добавив ограничение типа "где", чтобы гарантировать, что он реализует мой интерфейс. Я просто не уверен, как настроить мой класс «категория» таким образом, чтобы он мог хранить и извлекать любой «IExampleInterface <>» - если это вообще возможно.
Я хотел бы иметь возможность использовать это для различных проектов, которые содержат основные типы (string / int / float / bool ...), но также имеют свои собственные структуры и классы.
Заранее благодарю за любой вклад в этот вопрос, я пытался разобраться сам - но он наверняка одолеет меня.