SLLambdaParser For Silverlight

本文介绍如何将LambdaParser开源项目整合到Silverlight中,并在客户端执行C#委托代码。主要内容包括对ExpressionParserCore.cs文件中GetTypeCore方法的修改、解决编译时错误的方法以及运行时报错的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LambdaParser 开源项目整合到Silverlight中,在Silverlight客户端上执行C#委托代码

    LambdaParser源代码可在http://code.google.com/p/lambda-parser/ 下载

    相关网址:http://www.cnblogs.com/zhucai/archive/2010/01/25/lambdaparser.html (朱才博客园)

 

修改条款:

    1 修改了ExpressionParserCore.cs中的 GetTypeCore(string typeName)方法:

 

/// <summary>
        /// 根据类型名称获取类型的对象
        /// </summary>
        /// <param name="typeName"></param>
        /// <returns></returns>
        private Type GetTypeCore(string typeName)
        {
            #if SILVERLIGHT
                Assembly a = typeof(System.Action).Assembly;
                Type type = a.GetType(typeName, false);
                if (type != null)
                    return type;

                foreach (System.Windows.AssemblyPart ap in System.Windows.Deployment.Current.Parts)
                {
                    System.Windows.Resources.StreamResourceInfo sri = System.Windows.Application.GetResourceStream(new Uri(ap.Source, UriKind.Relative));
                    Assembly assembly = new System.Windows.AssemblyPart().Load(sri.Stream);
                    type = assembly.GetType(typeName, false);
                    if (type != null)
                        return type;
                }
            #else
                // First - try all loaded types
                foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies())
                {
                    Type type = assembly.GetType(typeName, false, true);
                    if (type != null)
                        return type;
                }
            #endif
            return type;
        }

    2 编译时listParam.ConvertAll<Type>(m => m.Type).ToArray()会报错,换写该方法为GetTypes(listParam):

 

private Type[] GetTypes(List<System.Linq.Expressions.Expression> listParam)
        {
            List<Type> types = new List<Type>();
            foreach (var expression in listParam)
            {
                types.Add(expression.Type);
            }

            return types.ToArray();
        }

    3 运行时ReadExpression中报错:“访问安全关键方法“System.Runtime.InteropServices.Marshal.SizeOf(System.Type)”的尝试失败。”

      注释了case "typeof"

//#region case "sizeof":
                    //case "sizeof":
                    //    {
                    //        string str = GetBracketString(false);
                    //        Type type = GetType(str);
                    //        //currentExpression = System.Linq.Expressions.Expression.Constant(System.Runtime.InteropServices.Marshal.SizeOf(type));
                    //    }
                    //    break;
                    //#endregion
 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值