Funcデリゲートを呼び出すことによってC#のリフレクション
イントロ
最近、私のNPOI拡張ライブラリは、詳細はを参照してください、あなたがエクスポートするのFuncデリゲートを設定するためのコンテンツをカスタマイズすることができ、出力をカスタマイズする機能が増加していますhttps://www.cnblogs.com/weihanli/p/custom-column- -サポート-のための出力weihanli-npoi.html、あなたは簡単のFuncで設定することができますが、時間は少しトラブルを呼び出すために
リフレクション呼び出し
var propertyValue = property.GetValueGetter<TEntity>().Invoke(entity);
var propertyType = typeof(PropertySetting<,>).MakeGenericType(_entityType, p.PropertyType);
var formatterFunc = propertyType.GetProperty("ColumnFormatterFunc")?.GetValueGetter().Invoke(setting);
if (null != formatterFunc)
{
var funcType = typeof(Func<,,>).MakeGenericType(_entityType, key.PropertyType, typeof(object));
var method = funcType.GetProperty("Method")?.GetValueGetter().Invoke(formatterFunc) as MethodInfo;
var target = funcType.GetProperty("Target")?.GetValueGetter().Invoke(formatterFunc);
if (null != method && target != null)
{
// apply custom formatterFunc
// 这里调用方法的时候要注意,method的 invoke 对象是 target
propertyValue = method.Invoke(target, new[] { entityList[i], propertyValue });
}
}
デリゲートメソッドを取得します:GetProperty("Method")
ターゲットが実行されるように取得するときの方法:GetProperty("Target")
この方法は、デリゲートであるMethodInfo
に変換することができるオブジェクトMethodInfo
のオブジェクト、その呼び出しInvoke
メソッドは、パラメータを渡すことおよび他の情報を
method.Invoke(target, new object[]{ parameters });
メモ
私は〜あなたの助けのために、願っています