在另一个字典中使用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

在另一个字典中使用TValue的C#字典

您可以将所有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);
}