我想使用方法创建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
的新实例而无需手动声明并且不使用构造函数?或者在某个地方有一个非常长的构造函数会更容易吗?
答案 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。