在C#表达式树中可靠地检测编译器生成的类
发布时间:2020-12-15 06:22:37 所属栏目:百科 来源:网络整理
导读:我正在建立一个C#表达式到 Javascript转换器,沿着Linq-to-SQL,但我遇到编译器生成的表达式树的问题. 我遇到的特殊问题是处理编译器生成的MemberExpression值,但是没有在其类型上指定CompilerGeneratedAttribute. 这是我一直在努力的一个缩减版本: void Proc
我正在建立一个C#表达式到
Javascript转换器,沿着Linq-to-SQL,但我遇到编译器生成的表达式树的问题.
我遇到的特殊问题是处理编译器生成的MemberExpression值,但是没有在其类型上指定CompilerGeneratedAttribute. 这是我一直在努力的一个缩减版本: void ProcessMemberExpression(MemberExpression memberX) { var expression = memberX.Expression; var expressionType = expression.Type; var customAttributes = expressionType.GetCustomAttributes(true); var expressionTypeIsCompilerGenerated = customAttributes.Any(x => x is CompilerGeneratedAttribute); if (expressionTypeIsCompilerGenerated) { var memberExpressionValue = Expression.Lambda(memberX).Compile().DynamicInvoke(); ... do stuff ... } else { ... do other stuff ... } } 现在,我有一个Visual Studio调试会话打开,我发现这(在立即窗口中运行): expressionType.Name "<>c__DisplayClass64" expressionType.GetCustomAttributes(true) {object[0]} expressionType.GetCustomAttributes(true).Length 0 所以我在这里是一个明显的编译器生成的类没有自定义属性,因此没有编译器生成的属性!因此,我的代码将做其他的事情,当我打算做只是做的东西. 如果有人能帮助我,我会非常感谢.如果在所有可能的情况下,我真的不会做任何肮脏的东西,像匹配的expressionType.Name与类似<>.* __ DisplayClass. 解决方法
根据Jon Skeet的回答,这听起来像是检查尖括号会起作用.
Where/what is the private variable in auto-implemented property? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |