如何在参数对象 [] 前面插入对象
本文关键字:对象 前面 插入 参数 | 更新日期: 2023-09-27 18:30:30
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}},这就是上面的代码给我的。
解决方案是创建一个包含第一个元素 + 原始数组中的元素的新数组,并将新数组传递给另一个方法。
为此,您可以创建一个保存第一个参数的新数组,并使用 Concat 创建一个包含此参数和原始数组的集合,然后将该集合转换回数组。
这个表达式可以做到:
new object[] { something }.Concat(parameters).ToArray()
因此,构造函数定义将如下所示:
public bar(int something, params object[] parameters)
:base(new object[] { something }.Concat(parameters).ToArray())
{
}
老派:
- 创建数组 [N + 1]
- 复制第一个参数
- 之后复制/追加参数数组。
有时您不需要 LINQ,在这种情况下,数组的大小是已知的。
public static T[] Append<T>(this T first, params T[] items)
{
T[] result = new T[items.Length + 1];
result[0] = first;
items.CopyTo(result, 1);
return result;
}
(对于非常老的学校,请使用 Object 而不是 T)
我喜欢扩展;到目前为止,两个答案都有:
public static class ObjectExtensions
{
public static object[] PrependToParamArray(this object me, params object[] args)
{
return new[] {me}.Concat(args).ToArray();
}
}
通常数组是不受欢迎的。更好的解决方案是使用LinkedList,它提供了添加前端的方法
埃迪特
如果需要保留变量参数,则可以使用 .Union.ToArray() 方法在 c# 数组上可用