我尝试使用“插入”覆盖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);
}
}
}
}
我现在尝试了几种不同的方法,但无法解决问题。
答案 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