What params
实际上只是指定ParamArrayAttribute对于该参数。 C# 编译器理解这一点,并在幕后创建数组。
表达式不理解这一点,所以如果你想调用一个方法,你实际上必须自己创建数组params
。这也可以从以下事实看出:当您使用以下方式分配 lambda 时params
- 表达式的方法,表达式包含数组创建:
Expression<Func<string>> expression = () => string.Format("",1,2,3,4);
string expressionString = expression.ToString();
Here, expressionString
将包含这个字符串:
() => Format("", new [] {Convert(1), Convert(2), Convert(3), Convert(4)})
要创建创建数组的表达式,请使用Expression.NewArrayInit() method.
话虽这么说,如果您只想要两个参数(或一三个),则有超载的string.Format()您可以直接从表达式中使用它。