如何检查阵列是否包含任何项目或者是否为空?

时间:2017-06-07 06:47:00

标签: c# arrays

如果我定义一个整数数组:

int[] a = new int[13];

我没有插入任何项目,我怎么知道数组a是否包含任何项目或者是否为空? 我是否必须遍历所有a.Length指数? 在列表中

List<int> b = new List<int>();

如果我检查:

if(b.Count == 0)
{
    // The list does not contain any items.
}

是否有相同的方法来检查数组? 我在互联网上找到了一个数组是空还是空的检查。 在我的情况下,我确信数组不是null。 我只是想知道它是否包含任何项目。 我不关心数组中的哪个位置,也不关心哪个项目。 非常感谢你提前。

4 个答案:

答案 0 :(得分:1)

由于它是一个整数,您可以检查所有值是否为零:

if (array.All(y=>y == 0))
  {
    //If all values are zero, this will proceed on this statement.       
  }

答案 1 :(得分:0)

int[] a = new int[13]; // [0,0,0,0,0,0,0,0,0,0,0,0,0]

分配一个包含13个项目的数组。每个项目的值为0default(int)

所以你必须检查

bool isEmpty =  a.All(x => x == default(int));

如果0是数组中的有效值,则应使用可空类型:

int?[] a = new int?[13]; // [null,null,null,null,null,null,null,null,null,null,null,null,null,]
bool isEmpty =  a.All(x => !x.HasValue);

答案 2 :(得分:0)

定义这样的数组时:

int[] a = new int[13];

你得到一个包含13个元素的数组。它们都具有零值,因为它是int的默认值。

所以你能做的是:

bool hasElements = a.Any(x => x != 0);

答案 3 :(得分:0)

您可以创建自己的类来封装Array类,并跟踪数组是否已更改。

public class MyArray<T>
{
    private T[] array;
    private bool altered = false;

    public MyArray(int size)
    {
        array= new T[size + 1];
    }

    public T this[int index]
    {
        get
        {
            return array[index];
        }
        set
        {
            altered = true;
            array[index] = value;
        }

    }

    public bool HasBeenAltered()
    {
        return altered;
    }
}

函数HasBeenAltered()告诉数组的任何项是否已更新。

MyArray<int> arr = new MyArray<int>(10);
arr.HasBeenAltered(); // false

arr[4] = 4;
arr.HasBeenAltered(); // true