c# – 使用Expression []调用(params object [])
发布时间:2020-12-15 08:16:21 所属栏目:百科 来源:网络整理
导读:我试图在 Linq.Expression树中调用String.Format.这是一个简单的例子: var format = Expression.Constant("({0}) {1}"); var company = Expression.Property(input,membernames.First()); var project = Expression.Property(input,membernames.Last()); va
我试图在
Linq.Expression树中调用String.Format.这是一个简单的例子:
var format = Expression.Constant("({0}) {1}"); var company = Expression.Property(input,membernames.First()); var project = Expression.Property(input,membernames.Last()); var args = new Expression[] {format,company,project}; var invoke = Expression.Call(method,args); 但问题是String.Format的签名是: String.Format(string format,params object[] args) 而我正试图传递Expression []. 现在我可以解决创建数组的所有麻烦,用表达式的结果填充它,但我真正想要的结果是这样的: String.Format("({0}) {1}",input.foo,input.bar) 如何通过Linq表达式调用params函数? 解决方法
params实际上只是为该参数指定
ParamArrayAttribute . C#编译器理解这一点,并在幕后创建数组.
表达式不理解这一点,所以如果你想用params调用一个方法,你实际上必须自己创建数组.这可以通过以下事实看出:当您使用params-method为表达式分配lambda时,表达式包含数组创建: Expression<Func<string>> expression = () => string.Format("",1,2,3,4); string expressionString = expression.ToString(); 这里,expressionString将包含这个字符串: () => Format("",new [] {Convert(1),Convert(2),Convert(3),Convert(4)}) 要创建创建数组的表达式,请使用 话虽这么说,如果你只想要两个参数(或一个或三个),你可以直接在表达式中使用an overload of (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |