如何在不使用C#中的Length属性的情况下找到数组的长度?
答案 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异常时捕获,但为什么。