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

本文关键字:列表 添加 创建对象 动态 | 更新日期: 2023-09-27 18:13:38

我想使用一个方法来创建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的一个新的实例,而无需手动声明它和不使用构造函数?或者在以后的某个地方有一个很长的构造函数会更容易吗?

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

看起来你在寻找一个私有构造函数。在那里完成所有赋值,并从静态工厂方法调用私有构造函数。

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
}

您可以创建一个新对象并直接将值赋给它。

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。