我有一个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] 删除。
我来说两句