检测 MemberExpression 是否有值

发布于 2024-08-15 10:56:06 字数 652 浏览 4 评论 0原文

如何检测 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"}

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

How do I detect if a MemberExpression has a value that needs to be compiled/evaluated?

I have two separate member expression outputs, the first which has a value, and the second which doesn't. What is the best way to differentiate between the two?

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"}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不弃不离 2024-08-22 10:56:07

我对此有两个不同的答案。

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

如果您实际上正在尝试计算此时的表达式,那么我将创建一个实际返回该表达式的 lambda,对其进行编译,然后检查代码中的非值。

I see two different answers to this.

Are you trying to create a conditional with expressions and then do something with the result? If that is the case, you will create a BinaryExpression of type Equals (call the static Equals method on the Expression class) passing in the MemberExpression as left, and then passing another expression representing a non-value (null if a reference type, or a new instance of the struct if a value type).

If you are actually trying to evaluate the expression at that point, then I would create a lambda which actually returns the expression, compile it, and then check against a non-value in your code.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文