从现有阵列创建阵列

时间:2011-12-21 21:12:49

标签: c# runtime

这是代码:

class Program
{
    void Add2Array(object arr, object item)
    {
        if (arr.GetType() == typeof(string[]))
        {
            int iLen = (arr as Array).Length;
            var c = Array.CreateInstance(typeof (String), 3);
            Array v = Array.CreateInstance((arr as Array).GetValue(0).GetType(), iLen+1); // this works but when if arr is empty it wont work
            Array.Copy(ar, v, iLen);
            v.SetValue(item, iLen);
        }
    }
    public string[] sarr = new string[1];

    static void Main(string[] args)
    {
        Program p = new Program();
        p.sarr[0] = "String Item";
        p.Add2Array(p.sarr, "New string item");
    }
}

我想创建一个方法,它可以采用每种类型的数组并将新项目放入其中。 上面的代码是我的解决方案(如果你知道更好请分享),如果arr参数没有任何项目,它将无法正常工作。因为如果我使用这个Array.CreateInstance(arr.GetType(),3)它将创建像这个v.GetType() => string[2][]的新数组,因为arr是字符串数组,如果我创建相同类型它返回两个立体数组。

如何扩展数组(作为参数给出)并将新项目放入其中?

2 个答案:

答案 0 :(得分:5)

T[] Add2Array<T>(T[] arr, T item)
{
   return arr.Concat(new[]{item}).ToArray();
}

答案 1 :(得分:3)

无法扩展数组。您唯一能做的就是将数据复制到一个比原始数据大的新数组并附加数据。

顺便说一下,为什么不使用List&lt;&gt;?

using System;

namespace ConsoleApplication1 {
    class Program {
        static void Main(string[] args) {
            int[] x = new int[]{2,3,5};
            int[] y = new ArrayExpander().AddItem(x, 0);

            foreach (var i in y)
            {
                Console.Write(i);
            }
        }
    }

    class ArrayExpander
    {
        public T[] AddItem<T>(T[] source, T item)
        {
            var destination = new T[source.Length + 1];
            Array.Copy(source, destination, source.Length);
            destination[source.Length] = item;
            return destination;
        }
    }
}