检测到MemberExpression是否具有值

时间:2009-12-17 23:00:33

标签: c#-3.0 lambda

如何检测MemberExpression是否具有需要编译/评估的值?

我有两个单独的成员表达式输出,第一个有值,第二个没有。区分两者的最佳方法是什么?

exp
**{value(Microsoft.Connect.Api.Client.Tests.SearchQueryUnitTests+<>c__DisplayClass6).handle}**
    [System.Linq.Expressions.MemberExpression]: **{value(Microsoft.Connect.Api.Client.Tests.SearchQueryUnitTests+<>c__DisplayClass6).handle}**
    NodeType: MemberAccess
    Type: {Name = "String" FullName = "System.String"}

VS

exp
{x.CreatedBy}
    [System.Linq.Expressions.MemberExpression]: {x.CreatedBy}
    NodeType: MemberAccess
    Type: {Name = "String" FullName = "System.String"}

1 个答案:

答案 0 :(得分:1)

我看到了两个不同的答案。

您是否尝试使用表达式创建条件,然后对结果执行某些操作?如果是这种情况,您将创建一个类型为Equals的BinaryExpression(在Expression类上调用静态Equals方法),将MemberExpression传递为左侧,然后传递另一个表示非值的表达式(如果引用类型为null,则为如果是值类型,则为结构的新实例。

如果您实际上是在尝试评估该表达式,那么我将创建一个实际返回表达式的lambda,编译它,然后检查代码中的非值。