【问题标题】:Convert an array into an argument list将数组转换为参数列表
【发布时间】:2016-10-17 13:20:19
【问题描述】:

DateTime 构造函数需要 6 个参数:

DateTime date1 = new DateTime(2008, 1, 1, 6, 32, 0);

现在,我有

int[] dr = new int[]{2008, 1, 1, 6, 32, 0};

如何将该数组“转换”为参数列表 - 类似于 DateTime date1 = new DateTime(dr);

【问题讨论】:

  • new DateTime(dr[0],dr[1],dr[2]....)?
  • 如果您在new DateTime 上进行简单的 google 搜索,您可以轻松找到答案
  • 我不明白这里要关闭的投票/投票:很明显,OP 知道构造函数的正确签名;他只是想知道是否有办法将一个数组“展开”成六个单独的参数。 C# 没有提供任何这样的“魔法”这一事实不足以否定这个问题。
  • 这个问题到底是怎么“跑题”的?
  • 一个与构建代码相关的问题在这里怎么可能是“离题”?显然,答案可以是 - 如此处所示。

标签: c# parameter-passing


【解决方案1】:

你不能那样做,因为构造函数不接受数组;它需要六个单独的参数。不过,手动拆分数组的简单方法应该可行:

var date1 = new DateTime(dr[0], dr[1], dr[2], dr[3], dr[4], dr[5]);

如果您必须在代码中的多个位置执行此操作,请创建一个辅助方法来隐藏此代码:

static class DateHelper {
    public DateTime MakeFromComponents(int[] dr) {
        return new DateTime(dr[0], dr[1], dr[2], dr[3], dr[4], dr[5]);
    }
}
...
var date1 = DateHelper.MakeFromComponents(dr);

【讨论】:

  • 非常感谢;我必须做很多次。辅助方法“帮助”。
  • 这与其他一些(动态)语言不同,其中数组(或者更确切地说,元组)可以作为参数列表直接传递。
【解决方案2】:

有些事情并不像看起来那么难......

DateTime date1 = new DateTime(dr[0], dr[1], dr[2], dr[3], dr[4], dr[5])

只需将数组中的每一项传入适当的构造函数参数即可。

【讨论】:

    【解决方案3】:
    DateTime date1 = new DateTime(dr[0], dr[1], dr[2], dr[3], dr[4], dr[5]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-24
      • 2015-04-02
      • 2010-11-21
      • 1970-01-01
      • 2011-08-13
      • 1970-01-01
      • 2011-11-26
      相关资源
      最近更新 更多