在另一个字典中使用TValue的C#字典
本文关键字:字典 TValue 另一个 | 更新日期: 2023-09-27 17:59:45
我对C#还很陌生,而且我有Ruby背景。我还有很多东西要学,这就是为什么我要问以下问题:
目标:1) 我想创建一个字典,用字符串作为键,用我想要的任何对象类型作为值。类似这样的东西:
Dictionary<string, T>
2) 但这还不是全部。我还想要一个"主"字典,字符串作为键,上面描述的字典作为值。类似这样的东西:
Dictionary<string, Dictionary<string T>>
我希望它是那样的,这样我就可以像下面的例子一样工作:
MasterDictionary[Dict1].Add( Thing1 )
MasterDictionary[Dict2].Add( Thing2 )
当前代码:我正在尝试使用以下代码来实现这一点
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);
}
问题:我得到以下错误
1) 与"System.Collections.Generic.Dictionary>.Add(string,System.Collections.Generic.Diction)"匹配的最佳重载方法具有一些无效参数
2) 错误10参数1:无法从"System.Collections.Generic.Dictionary>"转换为"System.Collections.cGeneric.IDictionary"
以下线条用红色下划线
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);
我在这里显然做错了什么,甚至是违法的,我只需要知道它是什么,以及我该如何解决它!
我自己做了很多研究,但没有发现任何对我有帮助的东西。我已经看过如何制作字典的字典,但我不太确定如何告诉字典不要关心Value中的对象类型。
我知道"T"在这里可能有一些用处,但我真的不知道如何使用它,因为它总是告诉我"找不到类型或名称空间名称"T"
那么我该怎么办呢?
提前感谢-Sasha
您可以将所有dictonary更改为string、object。。。。
但也许,由于你来自Ruby,还有另一个问题…
将所有内容放入字典,然后在提取时重新计算出它们的类型,这可能不是最好的方法。在类型化语言中,通常最好为所有创建类型
也许最好有一个类型化的对象和它们所属类型的字典。。。
class GameResources
{
public Dictionary<string, Map> Maps { get; set;}
public Dictoinary<string, Tileset> Tileset { get; set; }
}
等等。。。或者经过一点思考,另一个类结构可能更适合您的情况
问题是您的typedef与创建的对象不匹配。将您的代码更改为:
public void 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, object>());
TempData.Add("Maps", new Dictionary<string, object>());
TempData.Add("Tilesets", new Dictionary<string, object>());
// Create GameData dictionary and copy TempData into it.
GameData = new Dictionary<string, Dictionary<string, object>>(TempData);
}