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

问题描述:

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

+0

什么是你这样做的目的是什么? – rahul 2010-01-11 05:44:55

+3

为什么你不能使用arraylength功能...这是作业吗? – lexu 2010-01-11 05:45:24

使用foreach结构遍历数组中的每个项目,为每次迭代增加一个计数器。

事情是这样的:

object[] o_arr = new object[5]; 

// code to initialise array 

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

Console.WriteLine(i); 
+0

我喜欢这个任何其他可能的方式 – ratty 2010-01-11 06:08:44

您可以使用长度属性?如果您正在使用Linq名称空间,则还可以使用Count()扩展方法。

+0

该OP说:“不使用长度属性” – xryl669 2013-09-26 13:54:25

迭代虽然它使用计数器和捕获,当你得到indexoutofbounds异常,但为什么。

这里的 “不同” 的解决方案。 :)

用法:

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(); 
    } 
}