插入List中的索引位置

时间:2015-09-29 18:41:25

标签: c# list insert

我尝试使用“插入”覆盖List中的值,但我的结果不是预期的。

运行代码后,我在List中有6个值,但应该只有4个

测试:

 public class Test
{
    static void Main(string[] args)
    {
        try
        {
            ModuleCAResults results = new ModuleCAResults() { modName = "Databases", credits = 5, name ="John" };
            results[1] = 100;
            results[2] = 50;
            results[3] = 89;
            results[1] = 40;
            results[3] = 20;
            results[4] = 6;

            Console.WriteLine(results);

            Console.ReadLine();
        }
        catch(Exception e)
        {
            Console.WriteLine(e.Message);
            Console.ReadLine();
        }
    }
}

public class ModuleCAResults
{
    public string modName { get; set; }
    public int credits { get; set; }
    public string name { get; set; }

    List<double> scores = new List<double>();

    public override String ToString()
    {
        string output = "Modual Name: " + modName + ", Credits: " + credits + ", Name: " + name + "\nCA Resulst:\n";
        for(int i =0; i< scores.Count; i++)
        {
            output += scores[i] + "\n";
        }
        return output;
    }


    public double this[int i]
    {

        get
        {
            int index = i - 1;
            if (index < 0 || index > scores.Count)
            {
                throw new Exception("Invalid CA number get");
            }
            else
                return scores[i]; 
        }
        set
        {
            int index = i - 1;
            if (index < 0 || index > scores.Count)
            {
                throw new Exception("Invalid CA number set");
            }
            else
            { 
                    scores.Insert(index, value);
            }
        }
    }
}

我现在尝试了几种不同的方法,但无法解决问题。

3 个答案:

答案 0 :(得分:1)

Insert没有覆盖,它会在索引处插入并且&#34;推送&#34;一切都是指数。因此,当您在索引2处插入时,它会将该项添加到列表中,并将索引2处的内容推送到索引3,以及{{1}处的内容转到3,等等。

相反,您可以使用4的组合并在列表中建立索引以实现您的目标:

Add

答案 1 :(得分:1)

List.Insert方法在指定位置插入新项目。它不会取代此位置的原始元素。

所以这段代码:

scores.Insert(index, value);

只需在索引位置插入新值,将列表中的所有其他值进一步移动一个位置。

只有4个元素用索引赋值取代它:

scores[index] = value;

答案 2 :(得分:1)

当index等于列表中的项目数时,List类上的Insert方法将在末尾插入项目。 有关出错的更多信息,请参阅https://msdn.microsoft.com/en-us/library/sey5k5z4(v=vs.110).aspx