使用 Expression[] 调用 (params object[])

2023-11-23

我正在尝试从 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)

我正在尝试传递表达式[]。

现在我可以解决创建数组的所有麻烦,用表达式的结果填充它,但我真正想要的结果是这样的:

String.Format("({0}) {1}", input.foo, input.bar)

如何通过 Linq 表达式调用 params 函数?


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()您可以直接从表达式中使用它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Expression[] 调用 (params object[]) 的相关文章

随机推荐

  • 动画边距/厚度

    我只是以为我已经知道 WPF 和 XAML 语法是如何工作的 呜呜 我收到消息 WithEvents variables can only be typed as classes interfaces or type parameters
  • 我可以在类外部初始化“constexpr static”成员吗?

    我正在使用可变宽度通信格式 处理它的结构看起来像这样 struct Header int msgType 1 len Header len sizeof this struct A public Header int x char y A
  • 每次更改 Rails 代码时都必须重新启动 Apache

    我正在使用 Apache 和 Passenger 运行 Rails 3 自从我从 Mongrel 切换到 Passenger 后 我发现每次更改代码时都必须重新启动 Apache 这是预期的行为吗 在开发中使用 Mongrel 是避免这个问
  • SwiftUI 将 TupleView 转换为 AnyView 数组

    Code 我有以下代码 struct CustomTabView View where Content View let children AnyView init ViewBuilder content escaping gt Conte
  • PyPlot 将替代 y 轴移动到背景

    在 pyplot 中 您可以使用以下命令更改不同图形的顺序zorder选项或通过更改顺序plot 命令 但是 当您通过添加替代轴时ax2 twinx 新轴将始终覆盖旧轴 如文档 是否可以更改轴的顺序以将替代 孪生 y 轴移动到背景 在下面的
  • “视觉继承”的现状如何

    我们有一个应用程序 它必须灵活地向用户显示其主表单 根据用户的不同 表单应该略有不同 也许这里或那里有一个额外的按钮 或者其他一些细微差别 为了停止编写代码来显式删除或添加控件等 我转向视觉继承来解决问题 在我认为是一种整洁 干净和逻辑的
  • 有没有办法在Python中创建类属性?

    由于某种原因 以下内容不起作用 gt gt gt class foo object property classmethod def bar cls return asdf gt gt gt foo bar
  • SimpleDateFormat toPattern 在 java 9 中的行为有所不同

    DateFormat dateFormat DateFormat getDateInstance DateFormat SHORT new Locale SV SE SimpleDateFormat dateFormat toPattern
  • std::string::npos == -1 总是 true 吗?

    标题相对来说是不言自明的 我认识到与其他答案的相似之处 但所有这些答案都有不同的运算符安排 因此也有不同的转换规则 所以我需要一个能够澄清这个特殊情况的答案 如果有人可以指出标准中解释这一点的部分 我会很乐意投票并接受答案 NO 这并不总是
  • 在 Rails 4 中使用单个表单保存多条记录

    我有一个模型叫Family which belongs to user我想让用户能够在一个表单中添加多个家庭成员 该表单位于 views families new html erb 因此用户会看到一张为一个 user id 创建 3 个家庭
  • SKPaymentTransactionObserver 在应用程序切换时未收到回调

    我设置了应用内购买 以便当用户单击购买按钮时 会出现 请稍候 视图并将付款添加到付款队列中 这总是会导致队列观察者立即回调 表示交易进入 购买 状态 当用户在弹出确认购买对话框之前返回主屏幕然后取消时 就会出现我的问题 如果我在主屏幕上等待
  • 在 Razor 中使用 Html.EditorForModel 渲染时,ASP.Net [HiddenInput] 数据属性不起作用?

    我有以下模型 public class Product HiddenInput DisplayValue false public int ProductID get set Required ErrorMessage Please ent
  • 如何在 QWidget 周围添加边框?

    我在用PyQT4为潜在客户创建示例应用程序 我正在寻找某种方法来在特定小部件周围放置边框 请给我一些寻找的指示 更新 class CentralWidget QtGui QWidget def init self mainWindow su
  • 如何获取android中所有非系统应用程序的列表

    我正在开发一个应用程序 我想在其中获取所有非系统应用程序的列表 这是我的代码部分 TextView tv new TextView this this setContentView tv ActivityManager actvityMan
  • 在 ARM 上的 Linux 中写入和读取内存映射设备寄存器

    我正在尝试按照以下步骤读取和写入 ARM9 SAM9X25 上的寄存器 http infocenter arm com help index jsp topic com arm doc faqs ka3750 html我以以下代码结束 in
  • 在代理上启用 ssl 后,服务器发送的事件停止工作

    我在他面前做了一个基于Tomcat和Nginx的Web项目 必须努力工作才能使其无错误地运行 但是 当我将 ssl 添加到 nginx 时 停止工作的服务器发送事件 如果我直接访问后端服务器 它可以工作 所以 nginx 的某个地方有问题
  • 返回 `p->first` 和 `p->second` 的 C++ 函数对象

    是否有一个内置函数对象返回p gt first and p gt second 这样我就可以愉快地写作了 transform m begin m end back inserter keys get first transform m be
  • 在android中使用OpenCV进行人脸识别?

    我能够使用 open cv 检测人脸 但我不知道如何处理人脸识别 我用谷歌搜索了很多 但没有找到任何可以指导我的文章或博客 有人可以帮我在android上开发人脸识别应用程序吗 您始终可以使用 JavaCV 它是本机 OpenCV 函数的一
  • 如何在Matlab中定义结构体

    我知道结构可以通过多种方式定义 例如 向变量添加字段 p color red 2 p color green 4 p color blue 7 通过赋值定义标量结构 S struct a 0 b 1 c 2 我想要做的是创建一个结构定义 如
  • 使用 Expression[] 调用 (params object[])

    我正在尝试从 Linq Expression 树中调用 String Format 这是一个简单的例子 var format Expression Constant 0 1 var company Expression Property i