2016-03-15 19 views
4

什么是检查System.Linq.Expressions.Expression实例是否为空的最佳方法?例如,如下所示:如何检查表达式是否为空(void)?

Expression expression = Expression.Empty(); 
... 
if (expression.IsEmpty) { ... 

只有IsEmpty不存在。

一个想法是要测试的ToString结果:

if (expression.ToString() == "default(Void)") { ... 

,但似乎并不正确。

回答

3

根据文档Empty()返回

具有NodeType属性等于默认 和类型属性设置为空隙的DefaultExpression。

,所以你应该能够使用:

if(expression.NodeType == ExpressionType.Default && expression.Type == typeof(void)) 
+0

但是,这并不意味着有不能永远是一个void类型和默认值,表示不是其他东西的表达空的表达。 – Servy

+0

这就是我的下一个问题。我看到默认的部分,但不是测试'expression.Type == typeof(System.Void)'足够吗?某物不能比空虚本身更空虚......可以吗? – Dejan

+0

@Dejan事实并非如此。有各种各样的没有类型的表达。它只是意味着它们不会产生一个值(因此也会用于它们的副作用)。 – Servy