C#通用设置属性

迈克·菲尔登(Mike Fielden)

我有一个C#类,看起来像这样:

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

例如,在某个地方,我有一个需要设置属性的变量"title"我的C#相当生锈,但是基本上我想做的是:

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

显然,这是psuedocode,但是...使用C#甚至可能吗?

马克·格雷韦尔

是; 反射,在这种情况下是字段(但是属性会更好):

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章