2

我想使用一种方法来创建一个实例,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或者在路上的某个地方有一个很长的构造函数会更容易吗?

4

2 回答 2

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
}
于 2013-05-14T00:15:52.447 回答
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。

于 2013-05-14T00:15:06.237 回答