SetValue
LINQ式を使用してリフレクション->を高速化しようとしています。
私の問題はこの方法です:
public void SetValue<T>(T obj)
{
FieldInfo field = typeof(T).GetField("Title", BindingFlags.Instance |
BindingFlags.Public |
BindingFlags.IgnoreCase);
ParameterExpression targetExp = Expression.Parameter(typeof(T), "target");
ParameterExpression valueExp = Expression.Parameter(field.FieldType, "value");
// Expression.Property can be used here as well
MemberExpression fieldExp = Expression.Field(targetExp, field);
BinaryExpression assignExp = Expression.Assign(fieldExp, valueExp);
var setter = Expression.Lambda<Action<T, string>>(assignExp, targetExp, valueExp).Compile();
setter(obj, "Hello World");
//Console.WriteLine(obj.title);
}
私はこれをこのように呼びます:
var ii = new Controllers.SearchController.InstantItem();
SetValue<Controllers.SearchController.InstantItem>(ii);
問題はこの行です:
var setter = Expression.Lambda<Action<T, string>>(assignExp, targetExp, valueExp).Compile();
field.FieldType
Actionはジェネリックスを使用しているため、文字列を...に置き換えることはできません。
ステートメントを作成せずにこれを実行し、switch(field.FieldType)
可能なタイプごとにジェネリックメソッドを配置する可能性はありますか?これは非常に時間がかかりますか?