我有一个名为 Weapon 的类,它存储名为 Strength、Dexterity、Vitality、Intelligence 的公共(public)字段。 (类型 Int32)
在武器对象的构造函数中,我有一个随机选择这些“属性”之一并为其赋值的方法。
Random random = new Random();
int primary = random.Next(0, 4);
if (//Condition met)
{
switch (primary)
{
case 0:
Strength = ...
break;
case 1:
Dexterity = ...
break;
case 2:
Vitality = ...
break;
case 3:
Intelligence = ...
break;
}
}
我发现这段代码丑陋且难以维护。
有没有办法将这些“属性”存储在数组或列表中?然后 Random 会在 0 和 Attributes.Length 之间进行选择,并相应地分配一个值。
有点像这样(这不会起作用,只是让你明白)
Random random = new Random();
int[] attributes = {this.Strength, this.Dexterity, this.Vitality, this.Intelligence};
int index = random.Next(0, attributes.Length);
//lets say 0, so index = Strength
if (//Condition met)
{
//This is the part where index would be 0 so the program would assign 'Strength' a value
}
值应分配给数组中选择的字段。不是数组中的元素。
这对以后开发继承类有很大帮助
请您参考如下方法:
可以用unsafe来完成代码和指针,但更安全的方法是使用方法数组:
Action<int>[] stats = { i => Strength = i, i => Dexterity = i, i => Vitality = i, i => Intelligence = i };
stats[new Random().Next(stats.Length)](123); // set random stat to 123
