如何在不知情的情况下将对象添加到集合中';s类型

本文关键字:集合 类型 添加 不知情 情况下 对象 | 更新日期: 2023-09-27 18:26:50

我在游戏中添加了一个"控制台",我可以在其中键入命令并接收响应(基于此)。我需要能够访问我在控制台类的Game.cs中实例化的对象。我不能把它们传递给构造函数,因为我不知道一旦"引擎"完成,会有多少。

我尝试使用一种方法将对象添加到Dictionnary<string, object>,但无法访问属性。

我想做的事:

Game1.cs

TileMap tileMap = new TileMap();
BakuConsole console;
...
console = new BakuConsole(this, Content.Load<SpriteFont>("ConsoleFont"));
console.AddRef("tileMap", tileMap);

巴库控制台

public void AddRef(/* some args */) {
   // halp!
}
public void Execute(string input) {
    switch (input)
    {
        case "some --command":
            console.WriteLine(g.ToString());
            // execute stuff, with an object that was added via AddRef()
            console.WriteLine("");
            console.Prompt(prompt, Execute);
            break;
        default:
            console.WriteLine("> " + input + " is not a valid command.");
            console.WriteLine("");
            console.Prompt(prompt, Execute);
            break;
    }
}

我希望我足够清楚。谢谢

编辑:我只是不希望我的构造函数变得太大,以防我添加更多类型:

TileMap tileMap = new TileMap();
OtherType1 ot1 = new OtherType1();
OtherType2 ot2 = new OtherType2();
OtherType3 ot3 = new OtherType3();
OtherType4 ot4 = new OtherType4();
OtherType5 ot5 = new OtherType5();

IronPython正是做我想做的事情,并通过Globals.Add("string",object")来完成。然而,我似乎在(IronPython的)源代码中找不到它。

如何在不知情的情况下将对象添加到集合中';s类型

根据您的描述,您实际上并不需要字典,您需要某个对象上的几个属性,可能直接在BakuConsole上;

class BakuConsole
{
    … // your current code here
    public TileMap TileMap { get; set; }
    public OtherType1 OtherType1 { get; set; }
    …
}

然后,你可以这样设置:

console.TileMap = tileMap;
console.OtherType1 = otherType1;
…

然后,当您使用它时,访问属性不会有任何问题。

我可以看到您正在将Game的引用传递给Console类。为什么不使用该引用来访问Game类中需要的内容?

您需要在字典中指定要添加到字典中的对象的类名。假设,我必须添加"Game1"对象,那么我们应该按照以下方式初始化字典。。。

Dictionary<string, Game1> dicDemo = new Dictionary<string, Game1>();
Game1 objgame1 = new Game1();
dicDemo.Add(string.Empty,objgame1);