В настоящее время я использую FieldInfo.GetValue
и FieldInfo.SetValue
в моей программе, что значительно замедляет мою программу.C# FieldInfo отражение альтернативы
Для PropertyInfo
Я использую методы GetValueGetter
и GetValueSetter
, поэтому я использую только одно отражение для определенного типа. Для FieldInfo
методы не существуют.
Что такое предлагаемый подход для FieldInfo
?
EDIT: Я следовал this useful link от CodeCaster's ответ. Это отличное направление поиска.
Теперь «единственная» точка, которую я не получаю в этом ответе, заключается в том, как я могу кэшировать геттеры/сеттеры и повторно использовать их в общем виде, используя только имя поля - это в основном то, что 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....
Не с помощью отражения, если вы абсолютно не нужно. – CodeCaster
Как получается FieldInfo? Если вы знаете имя поля во время компиляции, я предлагаю сделать пару лямбда-выражения для набора и получить значение. – IllidanS4
@CodeCaster Не дубликат, по крайней мере, не связанный вопрос. Обратите внимание, что вопрос в ссылке связан с PropertyInfo, а именно с полем FieldInfo. В этих двух существенных различиях. – IllidanS4