Skip to main content
 首页 » 编程设计

c#之在集合中存储对公共(public)字段的引用

2024年01月26日23langtianya

我有一个名为 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