我有一个C#类,如下所示:
public class Model
{
public string title;
public string name;
...
}
某处我有一个变量,其中包含我需要设置"title"
的属性。
我的C#相当生疏,但基本上我想做的是:
var attrToBeSet = "title";
var model = new Model();
model[attrToBeSet] = "someValue";
显然这是伪造的,但是......这对C#来说是否可行?
答案 0 :(得分:5)
是;反射,在这种情况下是一个字段(但属性会更好):
var attrToBeSet = "title";
var field = model.GetType().GetField(attrToBeSet);
field.SetValue(model, "someValue");
请注意,这比常规代码慢得多。如果你正在做很多这样的事情,有很多方法可以通过元编程使反射速度更快,也许可以通过Action<Model,object>
将事物烘焙成DynamicMethod
或类似的东西 - 但这只有做很多事情才有意义。
请注意,这应该是一个属性(您应该避免直接暴露字段):
public string Title {get;set;}
然后:
var attrToBeSet = "Title";
var prop = model.GetType().GetProperty(attrToBeSet);
prop.SetValue(model, "someValue", null);