如何在不知情的情况下将对象添加到集合中';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的)源代码中找不到它。
根据您的描述,您实际上并不需要字典,您需要某个对象上的几个属性,可能直接在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);