在不使用Length属性的情况下查找数组的长度

时间:2010-01-11 05:43:27

标签: c#

如何在不使用C#中的Length属性的情况下找到数组的长度?

4 个答案:

答案 0 :(得分:2)

使用foreach构造迭代数组中的每个项目,为每次迭代递增一个计数器。

这样的事情:

object[] o_arr = new object[5];

// code to initialise array

int i = 0;
foreach(object o in o_arr)
{
    i++;
}

Console.WriteLine(i);

答案 1 :(得分:1)

这是一个“不同”的解决方案。 :)

用法:

byte[] data = new byte[100];
int length = GetLength(data);

实现:

private static int GetLength(Array array)
{
    if (array == null)
        throw new ArgumentNullException("array");
    if (!array.GetType().FullName.EndsWith("[]"))
        throw new ArgumentException("'array' must be an szarray.");

    GCHandle handle = GCHandle.Alloc(array, GCHandleType.Pinned);
    try
    {
        IntPtr ptr = handle.AddrOfPinnedObject();
        int offsetToArrayLength = -8;
        int length = (int)Marshal.PtrToStructure(new IntPtr(ptr.ToInt64() + offsetToArrayLength), typeof(int));
        return length;
    }
    finally
    {
        handle.Free();
    }
}

答案 2 :(得分:0)

您可以使用长度属性吗?如果您使用的是Linq Name空间,也可以使用Count()扩展方法。

答案 3 :(得分:0)

迭代虽然它使用了一个计数器并在你获得indexoutofbounds异常时捕获,但为什么。