在不使用长度属性的情况下查找数组的长度
答
使用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
答
迭代虽然它使用计数器和捕获,当你得到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();
}
}
什么是你这样做的目的是什么? – rahul 2010-01-11 05:44:55
为什么你不能使用arraylength功能...这是作业吗? – lexu 2010-01-11 05:45:24