1

我正在尝试评估一个表达式以检查评估的输出是否为空。我的代码如下所示:

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 调用应该是什么样子以及我应该为它提供哪些参数?

4

0 回答 0