Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用array.Copy(a,0,b,0,20)将一个数组复制到另一个数组;_C# - Fatal编程技术网

C# 使用array.Copy(a,0,b,0,20)将一个数组复制到另一个数组;

C# 使用array.Copy(a,0,b,0,20)将一个数组复制到另一个数组;,c#,C#,如果我点击btn1,数组1(generate)的内容将发生变化。我想做的是:单击btn2(重置btn)后,我想将数组2(n)的元素复制到数组1(生成),但我遇到了以下错误: 目标数组不够长。检查destIndex和length,以及数组的下限 public partial class Form1 : Form { string[] generate = new string[20] {"Name1","Name2","Name3","Name4","Name5","

如果我点击btn1,数组1(generate)的内容将发生变化。我想做的是:单击btn2(重置btn)后,我想将数组2(n)的元素复制到数组1(生成),但我遇到了以下错误: 目标数组不够长。检查destIndex和length,以及数组的下限

 public partial class Form1 : Form
    {
        string[] generate = new string[20]   {"Name1","Name2","Name3","Name4","Name5","Name6","Name7","Name8","Name9","Name10","Name11","Name12","Name13","Name14","Name15","Name16","Name17","Name18","Name19","Name20" };
        string[] n = new string[] { "Name1", "Name2", "Name3", "Name4", "Name5", "Name6", "Name7", "Name8", "Name9", "Name10", "Name11", "Name12", "Name13", "Name14", "Name15", "Name16", "Name17", "Name18", "Name19", "Name20" };

    string name;
    int Num;

    public Form1()
    {
        InitializeComponent();
    }

    private void button3_Click(object sender, EventArgs e)
    {
        Application.Exit();
    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }

    private void button1_Click(object sender, EventArgs e) // START btn
    {
        Num = int.Parse(textBox1.Text) - 1;
        if (Num < 20)
        {
            if (generate.Length > Num)
            {

                for (int i = Num; i >= 0; i--)
                {

                    name = generate.ElementAt(i);
                    listBox1.Items.Add(name); // Print it to list1 
                    generate = generate.Where(s => s != name).ToArray(); // Delete name after using
                }
            }
            else MessageBox.Show("Sorry, remaining names =" + generate.Length);
            listBox2.Items.Clear();
            listBox2.Items.AddRange(generate);

        }
        else MessageBox.Show("Max name is 20!");

    }

    private void button2_Click(object sender, EventArgs e) // Reset btn
    {
        listBox1.Items.Clear();
        listBox2.Items.Clear();
        textBox1.Clear();
        Array.Copy(n, 0, generate, 0, 20);

    }
}
公共部分类表单1:表单
{
string[]generate=新字符串[20]{“Name1”、“Name2”、“Name3”、“Name4”、“Name5”、“Name6”、“Name7”、“Name8”、“Name9”、“Name10”、“Name11”、“Name12”、“Name13”、“Name14”、“Name15”、“Name16”、“Name17”、“Name18”、“Name19”、“Name20”};
字符串[]n=新字符串[]{“名称1”、“名称2”、“名称3”、“名称4”、“名称5”、“名称6”、“名称7”、“名称8”、“名称9”、“名称10”、“名称11”、“名称12”、“名称13”、“名称14”、“名称15”、“名称16”、“名称17”、“名称18”、“名称19”、“名称20”};
字符串名;
int-Num;
公共表格1()
{
初始化组件();
}
私有无效按钮3\u单击(对象发送者,事件参数e)
{
Application.Exit();
}
私有void Form1\u加载(对象发送方、事件参数e)
{
}
私有无效按钮1\u单击(对象发送者,事件参数)//启动btn
{
Num=int.Parse(textBox1.Text)-1;
如果(数值<20)
{
如果(generate.Length>Num)
{
对于(int i=Num;i>=0;i--)
{
name=generate.ElementAt(i);
listBox1.Items.Add(name);//将其打印到列表1
generate=generate.Where(s=>s!=name).ToArray();//使用后删除name
}
}
else MessageBox.Show(“对不起,剩余名称=“+generate.Length”);
listBox2.Items.Clear();
listBox2.Items.AddRange(生成);
}
else MessageBox.Show(“最大名称为20!”);
}
私有无效按钮2\u单击(对象发送者,事件参数)//重置btn
{
listBox1.Items.Clear();
listBox2.Items.Clear();
textBox1.Clear();
复制(n,0,generate,0,20);
}
}

}

您可以使用LINQ复制阵列

  var array2 =  array1.ToList().ToArray()

如果使用
.Copy
方法,请确保您的范围正确

当您单击按钮1时,以下行将为大小小于20的generate变量创建一个新数组:

generate = generate.Where(s => s != name).ToArray(); // Delete name

因此,当您调用按钮2时,您正在尝试从大小为20的数组n复制到大小小于20的数组
generate

如果可以,请提供帮助,我是C#+1新手,我想建议:
字符串[]generate;生成=新字符串[n.长度];n、 CopyTo(生成,0),但你的更好。