C# 为什么以这种方式复制阵列时不向目标阵列分配数字?

C# 为什么以这种方式复制阵列时不向目标阵列分配数字?,c#,C#,为什么这种复制方法不起作用?目标数组的位数应大于零、tab2[0]=3、tab2[1]=4等 int[] tab1 = { -2, 3, 4, - 5, 1, -7, -3, 4, 8, -10 }; int[] tab2 = new int[tab1.Length]; int a=0; for (int i = 0; i < tab1.Length; i++) { if (tab1[i]>0) { tab2[a] = tab1[i];

为什么这种复制方法不起作用?目标数组的位数应大于零、tab2[0]=3、tab2[1]=4等

int[] tab1 = { -2, 3, 4, - 5, 1, -7, -3, 4, 8, -10 };
int[] tab2 = new int[tab1.Length];
int a=0;
for (int i = 0; i < tab1.Length; i++)
{
    if (tab1[i]>0)
    {
        tab2[a] = tab1[i];
        a++;
    }                
    richTextBox1.AppendText(tab2[i] + " ");
}
为什么这种复制方法不起作用

实际上,复制正在工作,但问题在于
for
循环中的最后一行。您使用了错误的索引
i
。还有一个问题是,您正在使用源数组的
长度
初始化目标数组。它可能会导致目标数组中的尾随零。我建议使用
List
它将简化您的代码…并将最后一行移到循环之外

int[] tab1 = { -2, 3, 4, - 5, 1, -7, -3, 4, 8, -10 };
List<int> tab2 = new List<int>(tab1.Length);

for (int i = 0; i < tab1.Length; i++)
{
    if (tab1[i]>0)
    {
        tab2.Add(tab1[i]);
    }                
}

richTextBox1.AppendText(string.Join(" ", tab2);
int[]tab1={-2,3,4,-5,1,-7,-3,4,8,-10};
列表tab2=新列表(tab1.长度);
for(int i=0;i0)
{
表2.增加(表1[i]);
}                
}
richTextBox1.AppendText(string.Join(“,tab2));
int[]tab1={-2,3,4,5,1,7,3,4,8,10};
int[]tab2=新int[tab1.Length];
int a=0;
for(int i=0;i0)
{
tab2[a]=tab1[i];
richTextBox1.AppendText(tab2[a]+“”);
a++;
}
//我不知道你为什么把这个放在if声明之外。
//richTextBox1.AppendText(tab2[i]+“”);
}

循环后tab2的实际内容是什么?什么是
richTextBox1.AppendText(tab2[i]+”);
应该做什么。您在目标数组中设置了5项。其他5项保留其原始默认值。对于整数,我假设您希望追加
tab2[a]
而不是
tab2[i]
-当然,在增加a之前,…Klaus Gütter“richTextBox1.AppendText”=显示表Panagiotis Kanavos的内容,我希望tab2[0]=3,tab2[1]=4,tab2[2]=1,tab2[3]=4,tab2[4]=8,其余元素将等于0,但整个数组tab2等于0
int[] tab1 = { -2, 3, 4, - 5, 1, -7, -3, 4, 8, -10 };
List<int> tab2 = new List<int>(tab1.Length);

for (int i = 0; i < tab1.Length; i++)
{
    if (tab1[i]>0)
    {
        tab2.Add(tab1[i]);
    }                
}

richTextBox1.AppendText(string.Join(" ", tab2);
int[] tab1 = { -2, 3, 4, - 5, 1, -7, -3, 4, 8, -10 };
int[] tab2 = new int[tab1.Length];
int a=0;
for (int i = 0; i < tab1.Length; i++)
{
    if (tab1[i]>0)
    {
        tab2[a] = tab1[i];
        richTextBox1.AppendText(tab2[a] + " ");
        a++;
    }
    //I'm not sure why you put this outside the if statement.
    //richTextBox1.AppendText(tab2[i] + " ");         
}