首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C#和VB.Net的表达式树差异

C#和VB.Net的表达式树差异
EN

Stack Overflow用户
提问于 2013-04-19 19:25:58
回答 2查看 1.9K关注 0票数 49

我有一个处理表达式树的库。该库需要同时使用C#和VB.Net

注意到这两种语言在表达式树的构造方式上存在一些差异

  • 字符串比较

() => "a" == "b"成为Expression.Equals("a", "b")

Function() "a" = "b"成为Expression.Equals(Expression.Call(CompareString, "a", "b"), 0)

(我理解VB.Net在这里使用CompareString的原因)

  • 字符串连接

() => "a" + "b"成为Expression.Add("a", "b", String.Concat)

Function() "a" & "b"成为Expression.Call(String.Concat, "a", "b")

  • Optimization?

() => !(1 == 2)成为Expression.Not(Expression.Equals(1, 2))

Function() Not (1 = 2)成为Expression.NotEqual(1, 2)

我的库处理了所有这些差异,但是我还需要注意更多的差异吗?

编辑对我的代码做了一些解释。

我使用的系统对您指定的文档有一个过滤器,如下所示:

var filter = document.Filter;
filter.LeftParanthesis();
filter.Column(columnNumber);
filter.Equals();
filter.Value("abc");
filter.RightParanthesis();
filter.And();
filter.LeftParanthesis();
...
document.Refresh();

为了使过滤器更容易使用,我的代码允许您将过滤器指定为一个Expression<Func<bool>> lambda。

Expression<Func<bool>> filter = () => (123.AsStringColumn() == "abc") && (...);
filter.Apply(document);

然后,我的代码迭代表达式树并调用上面指定的文档筛选器方法。过滤器并不支持您可以放入lambda中的所有内容。方法调用是最明显的一种。

由于VB.Net在某些情况下会生成方法调用,而C#不会生成方法调用,因此我需要截获这些调用,并对它们进行不同的处理。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16103529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档