我有List<MemberBindings>
我检查特定属性。
根据属性,我想检查表达式并决定是保留还是丢弃绑定。
目前我有以下内容:
foreach(var memberBinding in memberBindings)
{
// ... check for attributes
var theExpression = ((MemberAssignment)memberBinding).Expression;
// ... check if not set and skip
}
我想检查表达式是否为空(意思是未设置),但我不明白这一点。
在DebugView中,它为{null}
的{{1}} - 属性显示Expression
。
memberBinding
和theExpression == null
都没有返回theExpression.Equals(null)
。同样尝试了true
,结果相同。
我在这里缺少什么?
**更新(添加了debug-view的截图)**
答案 0 :(得分:1)
Expression
表达式的MemberAssignment
属性永远不会null
。如果它表示空值分配,则其类型为ConstantExpression
,Value
属性为null
。
但是,Expression
类不会覆盖==
运算符和Equals
方法,因此将引用进行比较,这就是原因
theExpression == Expression.Constant(null)
和
theExpression.Equals(Expression.Constant(null))
不起作用(Expression.Constant
返回一个新的表达式引用)。
相反,您需要检查表达式实例是否为ConstantExpression
类型(通过使用NodeType
属性或is
运算符),如果是,则转换它并检查{{ 1}}属性。
像:
Value
或
if (theExpression.NodeType == ExpressionType.Constant &&
((ConstantExpression)theExpression).Value == null)
或if (theExpression is ConstantExpression &&
((ConstantExpression)theExpression).Value == null)
运营商:
as