C#一般设置属性

时间:2014-08-08 14:36:11

标签: c# class reflection

我有一个C#类,如下所示:

public class Model 
{ 
  public string title;
  public string name;
  ...
}

某处我有一个变量,其中包含我需要设置"title"的属性。 我的C#相当生疏,但基本上我想做的是:

var attrToBeSet = "title";
var model = new Model();
model[attrToBeSet] = "someValue";

显然这是伪造的,但是......这对C#来说是否可行?

1 个答案:

答案 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);