c#copy在params中的数组

时间:2012-11-01 10:03:29

标签: c# arrays params

我已经创建了一个可以通过1扩展数组值的函数
我有一个问题,我试图做以下功能:

//This is error free and compiles properly
public string[] addindex(string[] Input)
{
    string[] ar2 = new string[Input.Length + 1];
    Input.CopyTo(ar2, 0);
    ar2.SetValue("", Input.Length);
    Input = ar2;
    return Input;
}

支持多个参数。

所以,我做了这个:

public string[] addindexes(params string[] lists)
{
    string[] ar2;
    for (int x = 0; x < lists.Length; x++)
    {
        ar2 = new string[lists[x].Length + 1];
        lists[x].CopyTo(ar2, 0); //Error here
        ar2.SetValue("", lists[x].Length);
        lists[x] = ar2; //Error here
    }
    return lists;
}

好像我使用了错误的语法或什么?

3 个答案:

答案 0 :(得分:2)

您需要将params string[] lists更改为params string[][] lists,因为您现在正在传入数组数组。 (至少,方法会看到一个数组数组,即使你传入多个单独的数组。)

同样,您需要将返回类型更改为string[][]

有关详细信息,请参阅this

答案 1 :(得分:1)

您可以使用Resize方法更简单:

  

此方法分配具有指定大小的新数组,将旧数组中的元素复制到新数组,然后用新数组替换旧数组。

再延长一项:

 Array.Resize(ref list, list.Length + 1);
 list[list.Length - 1] = string.Empty;

扩展多个1:

 int size = 5;
 Array.Resize(ref list, list.Length + size);

 for (int i = list.Length - size; i < list.Length; i++)
     list[i] = string.Empty;

答案 2 :(得分:0)

你首先使用通用list怎么样?

List<string> Input = new List<string>();
Input.Add("new item");