Soy bastante nuevo en C# y vengo de un fondo Ruby. Todavía tengo mucho que aprender y es por eso que estoy haciendo la siguiente pregunta:C# Dictionary usando TValue dentro de otro Dictionary
Objetivo: 1) Me gustaría crear un diccionario con cadena como claves y cualquier tipo de objeto que desee como valores. Algo como esto:
Dictionary<string, T>
2) Pero eso no es todo. También quiero un diccionario "maestro" con cadenas como claves y el diccionario descrito anteriormente como valores. Algo como esto:
Dictionary<string, Dictionary<string T>>
quiero que sea de esa manera por lo que puede funcionar como el ejemplo siguiente:
MasterDictionary[Dict1].Add(Thing1)
MasterDictionary[Dict2].Add(Thing2)
Código actual: que estoy tratando de lograr esto usando el siguiente código
public List<string> DataTypes;
public Dictionary<string, Dictionary<string, object>> TempData;
public Dictionary<string, Dictionary<string, object>> GameData;
public Session()
{
// Create a list of all Data Types.
DataTypes = new List<string>();
DataTypes.Add("DataInfo");
DataTypes.Add("Maps");
DataTypes.Add("Tilesets");
// Create and populate TempData dictionary.
TempData = new Dictionary<string, Dictionary<string, object>>();
TempData.Add("DataInfo", new Dictionary<string, DataInfo>());
TempData.Add("Maps", new Dictionary<string, Map>());
TempData.Add("Tilesets", new Dictionary<string, Tileset>());
// Create GameData dictionary and copy TempData into it.
GameData = new Dictionary<string, object>(TempData);
}
Problema: consigo los siguientes errores
1) El partido mejor método para sobrecargada 'System.Collections.Generic.Dictionary> .Add (cadena, System.Collections.Generic.Dictionary)' tiene algunos argumentos no válidos
2) Error 10 Argumento 1: no se puede convertir de 'System.Collections.Generic.Dictionary>' a 'System.Collections.Generic.IDictionary'
Las siguientes líneas están subrayados en rojo
TempData.Add("DataInfo", new Dictionary<string, DataInfo>());
TempData.Add("Maps", new Dictionary<string, Map>());
TempData.Add("Tilesets", new Dictionary<string, Tileset>());
// Create GameData dictionary and copy TempData into it.
GameData = new Dictionary<string, object>(TempData);
hice claramente algo mal o incluso ilegal aquí, solo necesito saber de qué se trata y cómo podría solucionarlo.
He estado investigando mucho por mi cuenta, pero no he encontrado nada que pueda ayudarme en esto. He visto cómo hacer un diccionario de diccionarios, pero no estoy muy seguro de cómo decirle a un diccionario que no se preocupe por el tipo de objeto en Valor.
que sé "T" puede ser de alguna utilidad aquí, pero no se sabe muy bien cómo usarlo, ya que siempre me dice "El tipo o espacio de nombres 'T' no se pudo encontrar"
Así ¿que debería hacer?
Gracias de antemano - Sasha
¡Este método parece funcionar muy bien! – Sasha