我正在尝试string.Format
使用 Tree 调用
我做了一些工作,因为我的供应与接受params Expression[] _ParameterExpressions
的签名不匹配,它似乎不会应用隐式转换。string.Format
object[]
我目前的解决方案是将我提供的参数转换为object[]
使用
NewArrayExpression _NewArray = Expression.NewArrayInit(typeof(object), _ParameterExpressions.Select(ep => Expression.Convert(ep, typeof(object))));
并设置我的代理函数以将参数传递给string.Format
(我需要这个,否则它会说它找不到匹配的签名)
static string ReplaceParameters(string format, params object[] obj)
{
return string.Format(format, obj);
}
static IEnumerable<Expression> ReplaceStringExpression(Expression exp)
{
yield return exp;
yield return _NewArray;
}
最后是我的电话
ConstantExpression ce = Expression.Constant(orginalString, typeof(string));
MethodCallExpression me = Expression.Call(typeof(RuleParser), "ReplaceParameters", null,
ReplaceStringExpression(ce).ToArray());
该表达式有效,但我不太喜欢创建包含额外装箱过程的新数组的想法。我认为在这种简单的函数调用上做得过火了。
我怎样才能改善这个string.Format
电话?
==========
编辑
在我的学习上取得一些进展。我现在可以ReplaceParameters
放弃但仍然不喜欢创建对象数组_NewArray
MethodCallExpression me = Expression.Call(
typeof(string).GetMethod("Format", new Type[2] { typeof(string), typeof(object[]) }),
ReplaceStringExpression(ce).ToArray());