2016-03-15 2 views
4

Каков наилучший способ проверить, нет ли экземпляра System.Linq.Expressions.Expression? Например, что-то вроде этого:Как проверить, является ли выражение пустым (void)?

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

только что IsEmpty не существует.

Одна идея заключается в том, чтобы проверить результат ToString:

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

, но это не кажется правильным.

ответ

3

Согласно документации Empty() возвращает

DefaultExpression, который имеет свойство NODETYPE, равное по умолчанию и свойство Type установлено значение недействительно.

так что вы должны быть в состоянии использовать:

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

Но это не значит, что никогда не может быть выражением, которое является типом недействительным и значение по умолчанию, которое представляет собой нечто иное, чем пустое выражение. – Servy

+0

Это был бы мой следующий вопрос. Я вижу часть по умолчанию, но не проверяет 'expression.Type == typeof (System.Void)' достаточно? Что-то не может быть пуще, чем сама пустота ... не так ли? – Dejan

+0

@Dejan Это неправда. Есть все виды выражений, которые не имеют типа. Это просто означает, что они не дают значения (и поэтому используются для их побочных эффектов). – Servy