我创建了一个“ Person”类,我想做一个while循环,让用户添加对象直到他们想停止,但这是行不通的。
我认为问题是我不知道如何从列表中创建新对象,但是我不确定。
这是我的代码:
static void Afficher(List <Personne> maliste)
{
foreach (var per in maliste)
{
per.ToString();
}
}
static void Ajouter(List<Personne> maliste)
{
string s;
bool stop = false;
int i = 0;
while(!stop)
{
Console.WriteLine("Entrez les informations ou entrez pour terminez!!");
Console.WriteLine("Entrez le nom de la personne numero "+ (i+1));
s = Console.ReadLine();
if (s == "") break;
maliste[i] = new Personne();
maliste[i].nom = s;
Console.WriteLine("Entrez le prenom de la personne numero " + (i + 1));
s = Console.ReadLine();
if (s == "") break;
maliste[i].prenom = s;
Console.WriteLine("Entrez l'age de la personne numero " + (i + 1));
s = Console.ReadLine();
if (s == "") break;
maliste[i].age = int.Parse(s);
i++;
}
}
错误发生在maliste[i] = new Personne();
行:
ArgumentOutOfRangeException:索引超出范围。必须为非负数,并且小于集合的大小。
答案 0 :(得分:3)
添加新项目时,不能使用数组索引(例如maliste[i]
)。您需要做的就是调用maliste.Add
在列表中插入一个新项。您的函数应如下所示:
static void Ajouter(List<Personne> maliste)
{
string s;
bool stop = false;
int i = 0;
while(!stop)
{
Console.WriteLine("Entrez les informations ou entrez pour terminez!!");
Console.WriteLine("Entrez le nom de la personne numero "+ (i+1));
s = Console.ReadLine();
if (s == "") break;
var pers = new Personne();
maliste.Add( pers );
pers.nom = s;
Console.WriteLine("Entrez le prenom de la personne numero " + (i + 1));
s = Console.ReadLine();
if (s == "") break;
pers.prenom = s;
Console.WriteLine("Entrez l'age de la personne numero " + (i + 1));
s = Console.ReadLine();
if (s == "") break;
pers.age = int.Parse(s);
i++;
}
}