总结用表达式数调用的实例代码
导读:收集整理的这篇文章主要介绍了总结用表达式数调用的实例代码,觉得挺不错的,现在分享给大家,也给大家做个参考。照着 利用表达式树构建委托改善反射性能 做了一点小更改正好适合自己用 public static class DynamicMe...
收集整理的这篇文章主要介绍了总结用表达式数调用的实例代码,觉得挺不错的,现在分享给大家,也给大家做个参考。照着 利用表达式树构建委托改善反射性能 做了一点小更改正好适合自己用 public static class DynamicMethodBuilder {
public static Delegate BuildDynamicDelegate(MethodInfo methodInfo, ConstructorInfo constructorInfo = null) {
if (methodInfo == null)throw new argumentNullException("methodInfo");
ListParameterExPression>
paramExPRessions = methodInfo.GetParameters().Select((p, i) =>
{
VAR name = "param" + (i + 1);
return Expression.Parameter(p.ParameterTyPE, name);
}
).ToList();
MethodCallExpression callExpression;
if (methodInfo.IsStatic) {
//Call(params....)callExpression = Expression.Call(methodInfo, paramExpressions);
}
else{
if (constructorInfo != null) {
//Instance(params).Call(params....)ListParameterExpression>
constructorParamExpressions = constructorInfo.GetParameters().Select((p, i) =>
{
var name = "constparam" + (i + 1);
return Expression.Parameter(p.ParameterType, name);
}
).ToList();
callExpression = Expression.Call(Expression.New(constructorInfo, constructorParamExpressions), methodInfo, paramExpressions);
paramExpressions.InsertRange(0, constructorParamExpressions);
}
else{
callExpression = Expression.Call(Expression.New(methodInfo.ReflectedType), methodInfo, paramExpressions);
}
}
return Expression.Lambda(callExpression, paramExpressions).COMpile();
}
}
测试:
public class Baby {
private readonly DateTime _birthDay;
public Baby(DateTime birthDay) {
_birthDay = birthDay;
}
public Baby() {
_birthDay = DateTime.Now;
}
public string GetBabyInfo(string name, int sex) =>
$"姓名:{
name}
, 出生天数:{
DateTime.Now- _birthDay}
,性别 :{
(sex == 1 ? "男" : "女")}
";
}
class Program {
static void Main(string[] args) {
Type targetType = AsSEMbly.GetExecutingAssembly().GetType("ConsoleApplication1.Baby");
MethodInfo methodInfo = targetType.GetMethod("GetBabyInfo", new[] {
typeof(string), typeof(int) }
);
ConstructorInfo constructor = targetType.GetConstructor(new[] {
typeof(DateTime) }
);
WIThConstructor(methodInfo, constructor);
WithOutConstructor(methodInfo);
Console.ReadKey();
}
static void WithConstructor(MethodInfo methodInfo, ConstructorInfo constructor) {
var func = (FuncDateTime, string, int, string>
)DynamicMethodBuilder.BuildDynamicDelegate(methodInfo, constructor);
Console.WriteLine(func(DateTime.Now.AddDays(-100), "糖墩儿", 1));
}
static void WithOutConstructor(MethodInfo methodInfo) {
var func = (Funcstring, int, string>
)DynamicMethodBuilder.BuildDynamicDelegate(methodInfo);
Console.WriteLine(func("糖墩儿", 1));
}
}
以上就是总结用表达式数调用的实例代码的详细内容,更多请关注其它相关文章!
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 总结用表达式数调用的实例代码
本文地址: https://pptw.com/jishu/592297.html
