动态创建对象和添加到列表
本文关键字:列表 添加 创建对象 动态 | 更新日期: 2023-09-27 18:13:38
我想使用一个方法来创建Adventurer
的实例,然后将其添加到List<Adventurer>
。一个for循环将创建20个Adventurer
实例。我试图避免使用构造函数,因为接下来我将有相当多的值要传递进去。如果我想做的是不可能的,我将不得不恢复使用构造函数。
我需要这个方法来创建一个新的Adventurer
实例,并将值randomGender
、randomClass
和name
赋给它。现在我不知道该怎么做。此外,我不能创建一个新的实例并手动命名它,因为这个方法将被多次调用。
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。