`

SLLambdaParser For Silverlight

阅读更多

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
 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics