using System;
using System.Collections.Generic;
using System.Reflection;
public enum AttackType
{
Melee,
BlueBall,
NightmareBall,
Thunderstorm
};
public struct Spell
{
public AttackType attackType;
public double sliderSpeed;
public int baseDmg;
public Spell
(AttackType attackType
, double time, double sliderSpeed
, int baseDmg
) {
this.attackType = attackType;
this.sliderSpeed = sliderSpeed;
this.baseDmg = baseDmg;
}
}
public class Test
{
static T GetSpellProperty<T>(String name, Spell spell)
{
FieldInfo field = typeof(Spell).GetField(name);
return (T)(field.GetValue(spell));
}
public static void Main()
{
List<Spell> knownSpells = new List<Spell>();
knownSpells.Add(new Spell(AttackType.Melee, 1.0f, 0.5f, 20));
knownSpells.Add(new Spell(AttackType.BlueBall, 2.0f, 0.5f, 40));
knownSpells.Add(new Spell(AttackType.NightmareBall, 4.0f, 0.5f, 50));
Console.WriteLine(GetSpellProperty<int>("baseDmg", knownSpells[0]));
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLlJlZmxlY3Rpb247CgpwdWJsaWMgZW51bSBBdHRhY2tUeXBlCnsKCU1lbGVlLAoJQmx1ZUJhbGwsCglOaWdodG1hcmVCYWxsLAoJVGh1bmRlcnN0b3JtCn07CgpwdWJsaWMgc3RydWN0IFNwZWxsCnsKCXB1YmxpYyBBdHRhY2tUeXBlIGF0dGFja1R5cGU7CglwdWJsaWMgZG91YmxlIHRpbWU7CglwdWJsaWMgZG91YmxlIHNsaWRlclNwZWVkOwoJcHVibGljIGludCBiYXNlRG1nOwoJCglwdWJsaWMgU3BlbGwoQXR0YWNrVHlwZSBhdHRhY2tUeXBlLCBkb3VibGUgdGltZSwgZG91YmxlIHNsaWRlclNwZWVkLCBpbnQgYmFzZURtZykKCXsKCQl0aGlzLmF0dGFja1R5cGUgPSBhdHRhY2tUeXBlOwoJCXRoaXMudGltZSA9IHRpbWU7CgkJdGhpcy5zbGlkZXJTcGVlZCA9IHNsaWRlclNwZWVkOwoJCXRoaXMuYmFzZURtZyA9IGJhc2VEbWc7Cgl9Cn0KCgpwdWJsaWMgY2xhc3MgVGVzdAp7CgkKCXN0YXRpYyBUIEdldFNwZWxsUHJvcGVydHk8VD4oU3RyaW5nIG5hbWUsIFNwZWxsIHNwZWxsKQoJewoJCUZpZWxkSW5mbyBmaWVsZCA9IHR5cGVvZihTcGVsbCkuR2V0RmllbGQobmFtZSk7CiAgICAgICAgcmV0dXJuIChUKShmaWVsZC5HZXRWYWx1ZShzcGVsbCkpOwoJfQoJCgkKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKCQlMaXN0PFNwZWxsPiBrbm93blNwZWxscyA9IG5ldyBMaXN0PFNwZWxsPigpOwoJCQoJCWtub3duU3BlbGxzLkFkZChuZXcgU3BlbGwoQXR0YWNrVHlwZS5NZWxlZSwgMS4wZiwgMC41ZiwgMjApKTsKCQlrbm93blNwZWxscy5BZGQobmV3IFNwZWxsKEF0dGFja1R5cGUuQmx1ZUJhbGwsIDIuMGYsIDAuNWYsIDQwKSk7CgkJa25vd25TcGVsbHMuQWRkKG5ldyBTcGVsbChBdHRhY2tUeXBlLk5pZ2h0bWFyZUJhbGwsIDQuMGYsIDAuNWYsIDUwKSk7CgoJCUNvbnNvbGUuV3JpdGVMaW5lKEdldFNwZWxsUHJvcGVydHk8aW50PigiYmFzZURtZyIsIGtub3duU3BlbGxzWzBdKSk7Cgl9Cn0=