2009-12-17 59 views
2

如何检测MemberExpression是否有需要编译/评估的值?检测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

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

你是否试图创建一个有条件的表达式,然后对结果做些什么?如果是这种情况,您将创建一个类型为Equals的BinaryExpression(在Expression类中调用静态Equals方法),传入MemberExpression作为左边,然后传递另一个表示非值的表达式(如果引用类型为null,或者如果值类型是结构的新实例)。

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