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

时间:2012-03-04 05:54:38

标签: c# xna

我在游戏中添加了一个“控制台”,我可以在其中键入命令,并收到响应(它基于this)。我需要能够访问我在我的控制台类中的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);

BakuConsole.cs

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)中找到它。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

class BakuConsole
{
    … // your current code here

    public TileMap TileMap { get; set; }
    public OtherType1 OtherType1 { get; set; }
    …
}

然后,您可以这样设置:

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

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