C#如何从常规数组中删除元素

时间:2013-09-09 12:15:19

标签: c# arrays list

我正在使用一个包含5个元素的常规数组,我想删除该元素,但我不想使用任何集合,例如arrayListList

我的代码是

for (int c = 0; c < Alpha.Length; c++)
{
    if (Alpha[c].Power< 0)
    {
      //  Alpha.s = null;
    }
}

3 个答案:

答案 0 :(得分:10)

来自MSDN

  

每个维度的维度数和长度   在创建数组实例时建立。这些值不可能   在实例的生命周期中发生了变化。

(强调我的)。

按照设计,数组在C#中具有固定大小,因此应分配一个新数组:

Alpha = Alpha.Where(a => a.Power >= 0).ToArray();

没有Linq:

TheType[] alpha2 = new TheType[Alpha.Length];
int j=0;
for (int i=0; i < Alpha.Length; i++)
    if(Alpha[i].Power >= 0)
    {
        alphaTmp[j++] = Alpha[i];
    }
Array.Resize(ref alphaTmp, j);
Alpha = alphaTmp;

答案 1 :(得分:6)

根据任何改变数组长度的操作,你不能从数组中“删除”一个元素:一旦创建了一个数组,它的长度就固定了。选项:

  • 将元素值更改为null或其他适当的值
  • 将所有其他元素移向头部并将 last 元素值设置为null等
  • 创建一个长度较小的新数组,可能会将其分配回最初引用较大数组的变量/ property

目前还不清楚为什么你拒绝正常的收藏品。你应该仔细考虑这个决定非常 - 使用内置的集合类型几乎总是是一个更好的解决方案。

答案 2 :(得分:1)

您可以使用LINQ:

Alpha = Alpha.Where(ob => bo.Power >= 0).ToArray();

记住 - 它会创建一个新数组。

顺便说一句。为什么你不想使用List<T>