我目前在我的程序中使用FieldInfo.GetValue
了FieldInfo.SetValue
很多,这大大减慢了我的程序。
因为PropertyInfo
我使用GetValueGetter
andGetValueSetter
方法,所以我只对给定类型使用一次反射。对于FieldInfo
,方法不存在。
建议的方法是FieldInfo
什么?
编辑:我从CodeCaster 的回复中关注了这个有用的链接。这是一个很好的搜索方向。
现在我在这个答案中没有得到的“唯一”点是我如何缓存getter / setter并以通用方式重新使用它们,只使用字段的名称 - 这基本上就是SetValue
正在做的事情
// generate the cache
Dictionary<string, object> setters = new Dictionary<string, object>();
Type t = this.GetType();
foreach (FieldInfo fld in t.GetFields()) {
MethodInfo method = t.GetMethod("CreateSetter");
MethodInfo genericMethod = method.MakeGenericMethod( new Type[] {this.GetType(), fld.FieldType});
setters.Add(fld.Name, genericMethod.Invoke(null, new[] {fld}));
}
// now how would I use these setters?
setters[fld.Name].Invoke(this, new object[] {newValue}); // => doesn't work without cast....