添加到数组

时间:2010-05-13 11:13:54

标签: c# .net collections arrays

我有一个数组:

String[] ay = {
     "blah",
     "blah number 2"
     "etc" };

...但是现在我想稍后添加到这个数组,但我认为没有选择这样做。如何才能做到这一点?我不断收到一条消息,说String不能转换为String []。

谢谢

8 个答案:

答案 0 :(得分:6)

使用List而不是数组:

List<string> list = new List<string>();
list.Add( "blah" ) ;

然后,如果你确实需要它作为数组:

string[] ay = list.ToArray();

答案 1 :(得分:3)

数组具有固定大小,因此在创建之后,您无法更改它的大小(不创建新的数组对象)

使用List<string>代替数组。

答案 2 :(得分:2)

声明后,数组无法更改其大小。而是使用集合。例如:List

答案 3 :(得分:0)

正如大家已经说过的那样,在System.Collections.Generic命名空间中使用List。 您还可以使用Hashtable,它允许您为每个字符串赋予一个含义,或“key”,这使您可以轻松地使用关键字提取某个字符串。 (至于为了任何目的保留存储在存储空间中的消息。) 您还可以在每次添加值时创建新数组,使新数组1大于旧数组,将第一个数组中的所有数据复制到第二个数组中,然后在最后一个插槽中添加新值(长度 - 1) 然后用新的数组替换旧数组。 这是最常用的手动方式。 但List和Hashtable工作得非常好。

答案 4 :(得分:0)

如果您不需要索引特定的数组元素(使用括号),但您希望能够有效地添加或删除元素,则可以使用LinkedList。

答案 5 :(得分:0)

如果确实需要建立索引 看看System.Collection中的Dictionary数据类型

http://msdn.microsoft.com/en-us/library/xfhwa508.aspx

所以你可以做类似

的事情
        Dictionary<int, string> dictionary = new Dictionary<int, string>();
        dictionary.Add(1, "afljsd");

答案 6 :(得分:0)

这是一个扩展方法,用于将数组添加到一起并创建一个新的字符串数组

public static class StringArrayExtension
{
    public static string[] GetStringArray (this string[] currentArray, string[] arrayToAdd)
    {
      List<String> list = new List<String>(currentArray);

      list.AddRange(arrayToAdd);   


      return list.ToArray();
    }
}

答案 7 :(得分:0)

你可以这样做,但我不推荐它:

// Reallocates an array with a new size, and copies the contents
// of the old array to the new array.
// Arguments:
//   oldArray  the old array, to be reallocated.
//   newSize   the new array size.
// Returns     A new array with the same contents.
public static System.Array ResizeArray (System.Array oldArray, int newSize) {
   int oldSize = oldArray.Length;
   System.Type elementType = oldArray.GetType().GetElementType();
   System.Array newArray = System.Array.CreateInstance(elementType,newSize);
   int preserveLength = System.Math.Min(oldSize,newSize);
   if (preserveLength > 0)
      System.Array.Copy (oldArray,newArray,preserveLength);
   return newArray; 

}