5
Основываясь на документации here и here, два метода фабрики выглядят взаимозаменяемыми. Они?Являются ли заводские методы Expression.Parameter() и Expression.Variable() взаимозаменяемыми?
Основываясь на документации here и here, два метода фабрики выглядят взаимозаменяемыми. Они?Являются ли заводские методы Expression.Parameter() и Expression.Variable() взаимозаменяемыми?
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);
}