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}}这就是上面的代码给我的。
答案 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)
旧学校:
有时你不需要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()方法