在不使用Array.Length方法的情况下查找数组长度c#

时间:2014-08-18 23:28:08

标签: c# arrays

我想知道如何在不使用array.length方法的情况下查找数组的长度,而不是array.length方法实现什么?

我有一些功课来完成一些arbituary数组排序而不使用array.length方法我很好奇c#如何找到数组长度它是否通过数组计算每个非null值并返回一个值或者是否存在与数组长度相关联的特定内存值,可以通过好奇心访问更多其他任何我只是想知道长度方法幕后发生了什么

4 个答案:

答案 0 :(得分:2)

这是一个非常糟糕的方式,但要涵盖所有 工作的理由,但我强烈反对这一点。

int[] test = new int[10];
int count = 0;
     try
      {
         for (; ; )
         {
          count++;
          test[count].ToString();
         }
      }
catch (IndexOutOfRangeException ex)
  {
  }
Console.Write(count);
Console.ReadKey();

答案 1 :(得分:1)

您可以使用theArray.GetLength(0),但它与使用theArray.Length基本相同,只是更详细......

答案 2 :(得分:1)

这将是一种方式:

int count = 0;
foreach (var item in YourArray)
{
   count++;
}

count将保存数组中有多少项。

编辑: 当然,如果你不能使用可怕的长度属性,你可以使用Count()方法。

答案 3 :(得分:0)

在不使用Array.Length属性的情况下获取数组的长度几乎是不可能的。

嗯,你可以:

  1. 使用枚举器(在foreach语句中或通过LINQ)并计算它们给你的元素,但它会 只是一个间接 - ArrayEnumerator显然使用 内部Array.Length
  2. 使用不安全的代码并获取长度,因为它存储在之前 实际数据(实际第一个元素之前的4或8个字节)。
  3. 可能你甚至可以从托管堆中获取一些信息 数组引用并计算长度,但如果是 可能它会是一个黑客,即使我们以某种方式学习记忆 为数组分配的是100字节,我们无法确定是否使用了所有这些内存
  4. 建议的解决方案:

    但可能意味着使用数组终止符,比如'\ 0'字符C运行时用来终止它的字符串。

    要使用数组终止符,您只需选择一些值(通常是最大或最小)并将其用作数组终止符:

    Int32[] data = new Int32[] {10, -5, 100, Int32.MinValue};
    PrintDataWithoutLength(data, Int32.MinValue);   
    
    
    PrintDataWithoutLength<T>(T[] data, T terminator)
    {
         for(Int32 i = 0; !data[i].Equals(terminator) ; i++)
         {
             Console.WriteLine(data[i]);
         }
    }