1 回答

TA贡献1818条经验 获得超7个赞
表达式的类型playerStats[StatType.DEF]为just Stat。编译器不知道将哪种类型Stat存储为那里的值。
如果它将始终是StatDef,则应强制转换:
var def = (StatDef) playerStats[StatType.DEF];
// Now you can use def.ApplyDamageReduction etc
但是,您需要在任何时候使用特定于统计信息的成员进行强制转换。除非您经常想以相同的方式处理多个统计信息,否则我建议放弃字典方法,而只使用单独的字段:
class CharacterStats
{
private StatDefence defence;
private StatAttack attack;
private StatStrength strength;
// etc
}
你可以很容易地编写一个方法,可以让你迭代的时间在那里,所有的统计数据是有用的:
public IReadOnlyList<Stat> GetAllStats() =>
new Stat[] { defence, attack, strength, ... };
但我怀疑,在大多数情况下,您在使用统计信息时,实际上希望了解特定的统计信息。我总是宁愿写:
var strength = stats.Attack;
比
var strength = stats[StatType.STR];
即使我不需要强度统计的特定方面。
- 1 回答
- 0 关注
- 136 浏览
添加回答
举报