1
我試圖用樹完善的String.format CallExpression
調用string.Format
我花了一些工作,因爲我的供應params Expression[] _ParameterExpressions
不匹配的string.Format
簽署該接受object[]
現在看來,這將不適用的隱式轉換。
我目前的解決方案是使用
NewArrayExpression _NewArray = Expression.NewArrayInit(typeof(object), _ParameterExpressions.Select(ep => Expression.Convert(ep, typeof(object))));
和設置我的代理功能將參數傳遞給string.Format
(我需要這個,否則它會說,它無法找到匹配的簽名)
object[]
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());
我明白了。這就是重點。謝謝! – ipoppo