如何在params对象[]前面插入一个对象

时间:2014-11-16 04:04:53

标签: c#

public class bar:foo
{
    public bar(int something, params object[] parameters)
        :base(something, parameters) //foo will receive {int, object[]}, not what i want
    {
    }
}

public class foo
{
    public foo(params object[] parameters)
    {
    }
}

所以基本上我想在params数组的前面添加一个对象,我传入基类。让我说我打电话bar(1, 2, 3, 4, 5)我想要foo到receive {1, 2, 3, 4, 5}作为参数而不是{1,{2,3,4,5}}这就是上面的代码给我的。

4 个答案:

答案 0 :(得分:2)

解决方案是创建一个新数组,其中包含第一个元素+原始数组中的元素,并将新数组传递给另一个方法。

您可以通过创建一个包含第一个参数的新数组,并使用Concat创建包含此参数和原始数组的集合,然后将该集合转换回数组来实现。

这个表达式会这样做:

new object[] { something }.Concat(parameters).ToArray()

因此,您的构造函数定义如下所示:

public bar(int something, params object[] parameters)
    :base(new object[] { something }.Concat(parameters).ToArray())
{
}

答案 1 :(得分:0)

旧学校:

  • 创建数组[N + 1]
  • 复制第一个参数
  • 复制/附加params数组。之后。

有时你不需要LINQ,在这种情况下,数组的大小是已知的。

dplyr

(对于非常古老的学校使用Object而不是T)

答案 2 :(得分:0)

我喜欢扩展;到目前为止,两个答案中的一部分:

public static class ObjectExtensions
{
    public static object[] PrependToParamArray(this object me, params object[] args)
    {
        return new[] {me}.Concat(args).ToArray();
    }
}

答案 3 :(得分:-2)

通常阵列不受欢迎。更好的解决方案是使用LinkedList,它提供了添加前端

的方法

修改

如果需要保留变量参数,则可以使用c#数组中可用的.Union.ToArray()方法