工厂方法Expression.Parameter()和Expression.Variable()是否可以互换?

时间:2014-02-20 22:23:45

标签: c# expression-trees

根据文档herehere,两种工厂方法看起来可以互换。是吗?

1 个答案:

答案 0 :(得分:5)

Expression.Parameter()支持ByRef类型(即ref参数),而Expression.Variable()如果给出一个则会抛出异常。

它们在其他方面是相同的,但这是一个实现细节,你不应该依赖它:

public static ParameterExpression Parameter(Type type, string name)
{
    bool isByRef = type.IsByRef;
    if (isByRef)
    {
        type = type.GetElementType();
    }
    return ParameterExpression.Make(type, name, isByRef);
}

public static ParameterExpression Variable(Type type, string name)
{
    if (type.IsByRef)
    {
        throw Error.TypeMustNotBeByRef();
    }
    return ParameterExpression.Make(type, name, false);
}