0

嗨,我试图找到数组中的元素数

byte[] salt = new byte[32];

现在我只提到了大小 32 所以数组的Length属性和 Enumerable 的计数方法会给我32

即使我将使用 for 或 foreach 或任何其他循环构造迭代此数组,它也会迭代 32 次,并且每个索引上的值为 0(即字节的默认值)

现在假设我这样做:

for (int i = 0; i < 5 ; i++)
        {
            salt[i] = 4-i;
        }

而且我想知道从索引 0 开始在 Array 中顺序插入了多少个元素,在这里你可能会说你是在欺骗你迭代它 5 次并且你知道数字是 5 ,但是我有繁重的循环和其他逻辑(附加前置到另一个字节数组)。*我的问题是否有任何其他内置函数可以给我这个数字 5 ?*即使我迭代并检查第一个默认值并在那里中断循环并获取计数,但可能插入的最后一个值是 0 就像上面的 salt[4] 是 0 这样迭代会给我计数 4 这是不正确的. 如果我没记错的话,我认为当我们声明大小为 32 的数组时,保留 32 个连续内存字节以上,您可以在 0-31 的任何索引处自由插入,并且您有责任跟踪元素的位置、方式和数量被分配给 Array 。我希望你明白我的意思并提前感谢您的帮助。

4

3 回答 3

4

数组是一个数组,在.NET 中是在分配时初始化的。一旦它被初始化,给定值是未初始化还是只是 0 的问题是无法检查的。一个 0 就是一个 0。

但是,您可以通过多种方式绕过它。您可以List<int>像@SLaks 建议的那样使用 a 来获得一个动态分配的列表,该列表仅使用您想要的元素进行初始化。

您也可以使用,而不是数组int和数组int?,因此null值与 0 不同。

于 2013-02-10T17:24:19.987 回答
3

简短的回答是您不能,该数组包含 32 个整数,.net 框架不关心其中一些是否为 0,因此您可以创建自己的函数来计算数组中有多少个整数不同于 0,或者保留当您为数组元素或类似的东西分配值时的“计数”。

或者您可以使用另一个容器,例如一个列表,并从中动态添加或删除整数。

于 2013-02-10T17:21:39.300 回答
2

好的,当您将数组定义为 int[] myArray = int[32]; 你是说,我有 32 个整数。不,为我稍后将填写的 32 个整数创建空间。这就是 count 给你 32 的原因。

如果您想要可以真正添加和调整大小的东西,则需要使用 List (或其中一个亲戚。

如果您想为列表设置“上限”,我发现了这个:C# 中的最大容量集合

于 2013-02-10T17:21:25.260 回答