list内存如何分配啊 不够用 但是list不是每次添加动态重新分配的么??

解决方案 »

  1.   

    不是不够用的问题吧……索引超出数组界限是你的index不在数组里比如说你一个数组有10个数,你要求他list[999]这就报错了
      

  2.   

    List<T> 的容量是 List<T> 可以容纳的元素数。当向 List<T> 中添加元素时,将通过重新分配内部数组来根据需要自动增大容量。 如果可以估计集合的大小,那么当指定初始容量后,将无需在向 List<T> 中添加元素时执行大量的大小调整操作。 可通过调用 TrimExcess 方法或通过显式设置 Capacity 属性减少容量。减少容量会重新分配内存并复制 List<T> 中的所有元素。 此构造函数的运算复杂度为 O(n),其中 n 是 capacity。Capacity 是 List<T> 在需要调整大小之前可以存储的元素数,Count 则是 List<T> 中实际存储的元素数。 Capacity 总是大于或等于 Count。如果在添加元素时 Count 超过 Capacity,则通过在复制旧元素和添加新元素之前自动重新分配内部数组来使容量增加。 可通过调用 TrimExcess 方法或通过显式设置 Capacity 属性减少容量。如果 Capacity 的值是显式设置的,则内部数组也需要重新分配以容纳指定的容量,并且需要复制所有元素。 检索此属性值的运算复杂度为 O(1);设置此属性的运算复杂度为 O(n),其中,n 是新容量。 如果 Count 已经等于 Capacity,则在添加新元素之前,会通过自动重新分配内部数组来增加 List<T> 的容量并会将现有元素复制到新数组中。 如果 Count 小于 Capacity,则此方法的运算复杂度为 O(1)。如果需要增加容量以容纳新元素,则此方法的运算成为复杂度为 O(n) 的运算,其中 n 为 Count。 
      

  3.   

       List<string> valueList = new List<string>();
    报错是对这一句报错的   
    我对valuelist只执行add操作啊 
      

  4.   

    valueList.Add("~");这句也错
     treeview_data_result.AddRange(GainTreeViewValue(s[3]));这句也报
    但是这些我感觉都不是主要问题啊 不应该错的
      

  5.   

    up     up   up 
      

  6.   


                 List<string> valueList = new List<string>();
              //  valueList.
                 string color_Rusult,modelling_Result,shell_Result;
                HCS.Open_Segment(pathString);
                {
                  
                    int count = 0;
                    StringBuilder color_type = new StringBuilder(4096);
                    StringBuilder color_value = new StringBuilder(4096);
                    float color_r = new float();
                    float color_g = new float();
                    float color_b = new float();
                    HCS.Begin_Contents_Search(pathString, "COLOR");
                    HCS.Show_Contents_Count(out count);
                    while (HCS.Find_Contents(color_value, out count))
                    {
                        if (color_value.ToString().Trim() == "color")
                            HCS.Show_Color_By_Value(color_value, color_type, out color_r, out color_g, out color_b);                }
                    HCS.End_Contents_Search();
                    color_Rusult ="COLOR <"+ color_value.ToString() + color_type.ToString() + "r=" + color_r.ToString() +"g=" + color_g.ToString() + "b="+color_b.ToString()+">";
                    //For Modelling_Matrix
                    StringBuilder model_value = new StringBuilder(4096);
                    float[] modelling_value = new float[16];
                    HCS.Begin_Contents_Search(pathString, "MODELLING MATRIX");
                    HCS.Show_Contents_Count(out count);
                    while (HCS.Find_Contents(model_value, out count))
                    {
                        if (model_value.ToString() == "modelling matrix")
                        {
                            HCS.Show_Modelling_Matrix(modelling_value);
                        }
                    }
                    HCS.End_Contents_Search();
                    //valueList.Add(modelling_value.ToString());
                    modelling_Result = "MODELLING MATRIX <";
                    for (int i = 0; i < modelling_value.Length; i++)
                    {
                        modelling_Result += modelling_value[i].ToString();
                        modelling_Result += " ";
                    }
                    modelling_Result += ">";
                                   //For Shell
                    StringBuilder geometry_value = new StringBuilder(4096);
                    StringBuilder lod_value = new StringBuilder(4096);
                    HCS.Begin_Contents_Search(pathString, "GEOMETRY");
                    int shell_Point=0, shell_Tristrips=0, shell_Face=0, shell_Number, shell_Key = 0;// lod_lvl = 0;
                    int[] shell_Face_value = new int[4096];
                    float[] shell_Point_Value = new float[4096];
                    HCS.Show_Contents_Count(out count);
                    while (HCS.Find_Contents(geometry_value, out count))
                    {
                        if (geometry_value.ToString() == "shell")
                        {
                            HCS.Show_Shell_Face_Count(count, out shell_Face);
                            HCS.Show_Shell_Tristrip_Count(count, out shell_Tristrips);
                            HCS.Show_Shell(count, out shell_Point, shell_Point_Value, out shell_Number, shell_Face_value);
                            shell_Key = HCS.KInsert_Shell(shell_Point, shell_Point_Value, shell_Face, shell_Face_value);
                        }
                    }
                    shell_Result = shell_Key.ToString("X")+ "-"+"Ponits:"+shell_Point.ToString()+","+shell_Face.ToString()+"Faces in"+shell_Tristrips.ToString()+"tristrips";
                    HCS.End_Contents_Search();
                    valueList.Add("~");
                    valueList.Add(color_Rusult);
                    valueList.Add("~");
                    valueList.Add(modelling_Result);
                    valueList.Add("~");
                    valueList.Add("GEOMETRY");
                    valueList.Add("$");
                    valueList.Add("SHELL");
                    valueList.Add("%");
                    valueList.Add(shell_Result);
      

  7.   

    第一句话List<string> valueList = new List<string>();
    就报错了?
      

  8.   

     valueList.Add("~");
      valueList.Add(color_Rusult);
      valueList.Add("~");
      valueList.Add(modelling_Result);
      valueList.Add("~");
      valueList.Add("GEOMETRY");
      valueList.Add("$");
      valueList.Add("SHELL");
      valueList.Add("%");
      valueList.Add(shell_Result);
    问题  多
      

  9.   

    add的时候报“索引超出数组界限”?
      

  10.   

    是啊   就是add 想不明白
      

  11.   

                    valueList.Add("~");这一句  我写的一个大循环 第一遍能过  等第2层就错了
      

  12.   

    valuelist值等于1178时候  然后就是源数组长度不足  
      

  13.   

    我查了一下list<t>好像是无限多的
    那么当第一次调用Add方法的时候,系统就会为List分配4个位置的大小。而超过4个则分配8个,超过8个就分配16个。也就是说,假设你添加了2049个值进去,那么实际分配的空间大小就是4096。分配5万个进去,就会分配65536个。额外多出来不少。
      

  14.   

    valueList.Add("~");这个参数 有上面具体的要求啊 
      

  15.   

    我试了一下循环5000次add("asdasdasd")无任何问题。你到底是哪一句话报什么错?valueList.Add("~");这句报“索引超出数组界限”?
      

  16.   


    你这是new List<string>  List是你自己写的嘛??不然你怎么可以去new interface???