0

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

我的代码是

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

3 回答 3

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;
于 2013-09-09T12:16:47.483 回答
6

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

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

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

于 2013-09-09T12:17:31.400 回答
1

您可以使用 LINQ:

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

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

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

于 2013-09-09T12:20:23.723 回答