我正在尝试评估一个表达式以检查评估的输出是否为空。我的代码如下所示:
public class ObjectHelper<TType>
{
public static bool PathHasNull(object pParentObjectInstance, Expression<Func<TType, object>> pPathToValue)
{
Expression lExpressionPart = pPathToValue.Body;
if (lExpressionPart.NodeType == ExpressionType.TypeAs)
{
ExpressionParameter[] some_params;
//some code that creates the ExpressionParameters goes here
Delegate lDelegate = Expression.Lambda(lExpressionPart, some_params).Compile();
lMemberValue = lDelegate.DynamicInvoke(lInstance); //not sure about this...
}
if (lMemberValue == null)
{
return true;
}
return false;
}
}
这是调用该方法的方式,以解释“项目”的来源:
TypeX x = GetXInstance();
ObjectHelper<TypeX>.PathHasNull(x, (item => item.Foo.Bar.Something as SomeTypeOfThing).SomeProperty);
我尝试调用 Expression.Lambda(expr, some_parameters).Compile() 来获取一个委托,然后我可以使用它来获取“as”的输出,但我不断收到一个错误,即“X”类型的“变量”项目被引用从范围'',但它没有定义'。
我猜我没有为 Lambda 方法提供正确的参数,有人可以帮助了解正确的 Lambda 调用应该是什么样子以及我应该为它提供哪些参数?