C# 仅通过提供字符串名称获取属性
关于这个问题,我想问你几个小时,希望你能帮忙。 给出了以下等级体系:C# 仅通过提供字符串名称获取属性,c#,reflection,properties,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 Sk
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
}
所以
“战斗”,纽顿,30岁;会把Toon.Skillset.Fight设置为30
我希望我能解释得足够清楚,我很感谢大家的意见。我听说反思可以很好地解决这个问题,但我还没有找到答案
PS:仅仅在Toon中获取列表没有帮助,它会破坏语法。您可以使用反射:
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;
}
但是,这并不是最有效的解决方案。你应该考虑使用<代码>字典<代码>作为你的代码> SkiStase./P>BTW,你的类中有字段,而不是属性。你可以只使用索引器。公共技能此[字符串名称]{get{switch(name){case“Fight”:还击;case“Trade”:还击;case“Talk”:return-Talk;default:return-null;}}}}true,但最终的模型将有大约30个字段,因此我觉得这不合适。关于提供的几个字段,你当然是对的。@LarsTech:啊,是的,谢谢:)@IvanStoev抱歉。我现在已经修好了。