仅通过提供字符串名称获取属性

时间:2016-08-26 15:05:02

标签: c# reflection properties

现在就这个问题寻找好几个小时,希望你能提供帮助。 课程层次结构如下:

public class Toon 
{
 public Skillset skillset;

 public Toon()
 {

    skillset = new Skillset();
 }
}

public class Skillset 
{
    public Skill Fight;
    public Skill Trade;
    public Skill Talk;


   public Skillset()
   {
        Fight = new Skill() { name = "Fight", value = 10 };
        Trade = new Skill() { name = "Trade", value = 12 };
        Talk = new Skill() { name = "Talk", value = 15 };
   }

}

public class Skill
{ 
    public string Name;
    public int Value;
    public int Rank

} 

这是为了提供Toon.Skillset.Fight的语法等。

现在的问题是: 我希望能够随机增加技能,如果它们在收藏夹列表中,这是一个列表。

基本上:

public void setSkill(string skillname, Toon toon, int value)
{
  => get property and set it to value
}

这样

setSkill(" Fight",NewToon,30);将Toon.Skillset.Fight设置为30。

我希望我能够解释清楚,并且感谢任何意见。我听说反思可以很好地解决这个问题,但我还没有找到答案。

PS:只是在Toon中获取一个List并不会有帮助,它会破坏语法。

1 个答案:

答案 0 :(得分:1)

你可以使用反射:

public void setSkill(string skillname, Toon toon, int value)
{
    var field = typeof(Skillset).GetField(skillname);
    var skill = (Skill)field.GetValue(toon.skillset);

    skill.Value = value;
}

但是,这不是性能最佳的解决方案。您应该考虑使用Dictionary<string, Skill>作为Skillset