首页后端开发ASP.NET总结用表达式数调用的实例代码

总结用表达式数调用的实例代码

时间2024-01-30 08:45:03发布访客分类ASP.NET浏览617
导读:收集整理的这篇文章主要介绍了总结用表达式数调用的实例代码,觉得挺不错的,现在分享给大家,也给大家做个参考。照着 利用表达式树构建委托改善反射性能 做了一点小更改正好适合自己用 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
关于.net C# Sql数据库SQLHelper类实例代码 ASP.NET Core简单介绍教程(1)

游客 回复需填写必要信息