动态创建对象并添加到列表

时间:2013-05-14 00:05:26

标签: c#

我想使用方法创建Adventurer的实例,然后将其添加到List<Adventurer>。 for循环将创建20个Adventurer个实例。我试图避免使用构造函数,因为在路上我会传递相当多的值。如果我想要做的是不可能的,我将不得不恢复使用构造函数。

我需要此方法来创建Adventurer的新实例,并为其指定值randomGenderrandomClassname。此时我不知道如何。此外,我无法创建新实例并手动命名,因为此方法将被多次调用。

    public static Adventurer createAdventurer()
    {
        Array valuesGender = Enum.GetValues(typeof(AdventurerGender));
        AdventurerGender randomGender = (AdventurerGender)valuesGender.GetValue(rand.Next(valuesGender.Length));

        Array valuesClass = Enum.GetValues(typeof(AdventurerClass));
        AdventurerClass randomClass = (AdventurerClass)valuesClass.GetValue(rand.Next(valuesClass.Length));

        string name = "Test " + AdventurerManager.AvaliableAdvList.Count.ToString();

        return new Adventurer();
    }

这是我的for循环:

        for (int i = 0; i < 20; i++)
        {
            AdventurerManager.AvaliableAdvList.Add(AdventurerManager.createAdventurer());
        }

所以我的问题是......在createAdventurer中是否可以将值分配给Adventurer的新实例而无需手动声明并且不使用构造函数?或者在某个地方有一个非常长的构造函数会更容易吗?

2 个答案:

答案 0 :(得分:3)

看起来你是在私有构造函数之后。完成所有分配,并从静态工厂方法调用私有构造函数。

public static Adventurer createAdventurer()
{
    return new Adventurer();
}

private Adventurer()
{
    Array valuesGender = Enum.GetValues(typeof(AdventurerGender));
    AdventurerGender randomGender = (AdventurerGender)valuesGender.GetValue(rand.Next(valuesGender.Length));

    Array valuesClass = Enum.GetValues(typeof(AdventurerClass));
    AdventurerClass randomClass = (AdventurerClass)valuesClass.GetValue(rand.Next(valuesClass.Length));

    string name = "Test " + AdventurerManager.AvaliableAdvList.Count.ToString();

    // TODO assign member values here
}

答案 1 :(得分:2)

您可以创建一个新对象并将值直接分配给该对象。

public static Adventurer createAdventurer()
{
    Adventurer a = new Adventurer;        

    Array valuesGender = Enum.GetValues(typeof(AdventurerGender));
    AdventurerGender randomGender = (AdventurerGender)valuesGender.GetValue(rand.Next(valuesGender.Length));

    Array valuesClass = Enum.GetValues(typeof(AdventurerClass));
    AdventurerClass randomClass = (AdventurerClass)valuesClass.GetValue(rand.Next(valuesClass.Length));

    string name = "Test " + AdventurerManager.AvaliableAdvList.Count.ToString();

    a.Gender = randomGender;
    a.Class = randomClass;
    a.Name = name;

    return a;
}

此方法将返回具有随机性别,随机类和名称的玩家...测试1-20。