将元素添加到数组中

我正在从数据库中读取数据。 一个]

我需要在数组中再添加一个元素。

一旦我得到数组,我创建一个容量为n + 1的新数组,并将所有元素复制到新数组,并将新元素作为数组的最后一个元素。

我可以做这个。

有一个更好的方法吗? 尤其是Linq?

你所描述的实际上是唯一的方法。 数组无法在.NET中resize,因此我们必须分配一个新数组并将旧数组复制到其中 。 例如,这就是Array.Resize工作方式。 LINQ在这里并不是真正的帮助,如果是的话,它只是将现有arrays投射到一个新arrays – 这正是我们刚刚描述的。

如果您发现需要经常调整arrays大小,则应考虑使用ArrayList或者如果可能,请考虑使用强类型List

编辑 :如果您只是从某些方法获取数组而无法控制,但在您的代码中您可以使用IEnumerable ,您可以使用LINQ来延迟枚举并节省额外的数组分配:

 var mySequence = originalArray.Concat(new[]{myobj}); //snip foreach(var item in mySequence) { //do stuff } 

只有在调用ToArray()时才会产生额外的开销。 否则,我们只是对原始数组执行单个枚举,然后在最后隐藏额外的项目。

如果要使用LINQ将数组放在一起,可以使用Concat:

 var combined = array1.Concat(new[] { element }).ToArray(); 

但是,您现在要为集合创建许多不同的数组。 更好的选择是使用List。 它将由单个arrays支持并自动扩展。

C#yield(无需额外存储空间)

使用C# yield ,您可以在不分配额外存储的情况下返回arrays等。 在产生原始数组的每个元素之后,您可以轻松地插入任何额外的元素:

 IEnumerable GetEverything() { // first return the entire original array foreach(int num in arrNumbers) yield return num; // then slip in extra element at the end yield return 5; // yield even more elements if you want... } 

然后你可以像这样使用它:

 foreach (int n in GetEverything()) Console.WriteLine(n); 

在这种情况下,没有必要拔出LINQ,因为yield语句很简单,非常适合您的需要。

您可以使用该数组初始化列表。

 var stuff = new List( a ); stuff.Add( moreStuff ); 

您可以使用Array.Resize : http : //msdn.microsoft.com/en-us/library/bb348051.aspx

它基本上是你手动完成的,但有点整洁。

如果您定期向arrays添加多个元素,我建议移动到列表,因为它对插入更有效。

改为使用List ,并调用myList.Add(item)

编辑:如果您的意思是将数据作为数组(不将数据读入数据),请使用List的构造函数从数组中复制。

您可以使用ToArray和ToList Linq命令。

这是一个通用方法,它将返回一个新数组,该数组将是新项目的原始副本。

 public static T[] AddItem( T[] array, T item ) { List list = array.ToList(); list.Add( item ); return list.ToArray(); } 

这是一个将项添加到数组中的通用扩展方法。 (数组在内存中将是一个新的,因此可能有副作用)。

 public static void AddItem( this T[] array, T item ) { List list = array.ToList(); list.Add( item ); array = list.ToArray(); /* Untested, this may not compile! */ } 

你可以使用这样的东西,如果你有相同类型的数组{ArrayVar1,ArrayVar2}

 var arrayList = ArrayVar1.ToList(); arrayList.AddRange(ArrayVar2); // or for single element use arrayList.Add(Var2); ArrayVar1=arrayList.ToArray(); 

使用Array方法的示例Resize和ConstrinedCopy。 无需制作额外的arrays。

 Filter[] filterA = new Filter[] { new Filter() { field = "trans_date", Data = "2018-01-01", Op = "gt" } , new Filter() { field = "trans_date", Data = "2018-01-02", Op = "gt" } , new Filter() { field = "trans_date", Data = "2018-01-03", Op = "gt" } }; Filter[] filterB = new Filter[] { new Filter() { field = "trans_date", Data = "2018-01-04", Op = "gt" } , new Filter() { field = "trans_date", Data = "2018-01-05", Op = "gt" } }; //resizing the original array to hold all the new elements. Array.Resize(ref filterA, filterA.Length + filterB.Length); //take the items from filterB and place them in filterA Array.ConstrainedCopy(filterB, 0, filterA, 3, 2);