1
有沒有方法使用反射來添加每個變量?舉例來說,這樣做的手工方式是:使用反射將類中的每個變量加在一起
public class PlayerStats {
public float Health;
public float HealthRegen;
public float Mana;
public float ManaRegen;
public float Stamina;
public float StaminaRegen;
public float Armor;
public float AttackDamage;
public float AttackDamageCritical;
public float AttaackSpeed;
public float AttackRange;
public float MovementSpeed;
public static PlayerStats operator +(PlayerStats ps1, PlayerStats ps2){
PlayerStats returnPlayerStats = new PlayerStats();
returnPlayerStats.Health = ps1.Health + ps2.Health;
returnPlayerStats.HealthRegen = ps1.HealthRegen + ps2.HealthRegen;
returnPlayerStats.Mana = ps1.Mana + ps2.Mana;
returnPlayerStats.ManaRegen = ps1.ManaRegen + ps2.ManaRegen;
returnPlayerStats.Stamina = ps1.Stamina + ps2.Stamina;
returnPlayerStats.StaminaRegen = ps1.StaminaRegen + ps2.StaminaRegen;
returnPlayerStats.Armor = ps1.Armor + ps2.Armor;
returnPlayerStats.AttackDamage = ps1.AttackDamage + ps2.AttackDamage;
returnPlayerStats.AttackDamageCritical = ps1.AttackDamageCritical + ps2.AttackDamageCritical;
returnPlayerStats.AttaackSpeed = ps1.AttaackSpeed + ps2.AttaackSpeed;
returnPlayerStats.Health = ps1.AttackRange + ps2.AttackRange;
returnPlayerStats.Health = ps1.MovementSpeed + ps2.MovementSpeed;
return returnPlayerStats;
}
}
所以我想我可以通過使用反射自動化這個?也許是這樣的:
foreach(var field in typeof(PlayerStats).getFields()){
field.setValue((object)((int)field.getValue(ps1) + (int)field.getValue(ps2)))
}
你會被推動實際運行時工作到代碼只是爲了避免一些打字。如果這對你來說很痛苦,你可以寫一些T4模板來爲你生成。 –
您可以進一步推送,並使用表達式樹在運行時生成代碼,但僅在第一次調用方法之前生成代碼。這值得麼?我不這麼認爲。 – MarcinJuraszek