Ich arbeite derzeit an einem System zum Speichern und Abrufen von Daten aus einer Stammwörterbuchklasse. Stellen Sie sich etwas in dieser Art vor:
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(){
}
}
Was mich stört, ist, dass ich offensichtlich nicht in der Lage bin Dictionary<T, Dictionary<string, IElementExample<T>>
. Hat jemand eine Idee, wie ich so etwas bewerkstelligen könnte?
Das Ziel hier ist es, einen Master-Speicherort zu erstellen, wo eine Menge von Daten gespeichert werden können (für Spielkonfigurationsvariablen), die ich dann serialisieren/deserialisieren zu/von XML. Ich habe etwas, das für diese bereits funktioniert, und es funktioniert großartig, aber es ist unmöglich, Unterstützung für neue Datentypen ohne Bearbeiten der Manager/Kategorie Klassen hinzufügen (im Moment anstelle von GetValue ist es GetString/GetFloat/GetInt/GetBool/GetVector3... etc).
Ich kann sicherstellen, dass es nur tatsächlich mit Klassen, die entworfen sind, um mit ihm zu arbeiten, indem Sie "wo" Typ Einschränkung, um sicherzustellen, dass es meine Schnittstelle implementiert funktioniert. Ich bin mir nur nicht sicher, wie ich meine "Kategorie"-Klasse so einrichten kann, dass sie jedes "IExampleInterface<>" speichern und abrufen kann - wenn das überhaupt möglich ist.
Ich möchte in der Lage sein, dies für verschiedene Projekte zu verwenden, die alle die wichtigsten Typen (String/int/Float/Bool...) enthalten - aber auch ihre eigenen benutzerdefinierten Strukturen und Klassen haben.
Ich danke Ihnen im Voraus für jeden Beitrag in dieser Angelegenheit, ich habe versucht, es auf eigene Faust herauszufinden - aber es ist immer das Beste von mir für sicher.