如何从用户的类创建对象?

时间:2019-03-08 23:40:31

标签: c#

我创建了一个“ 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:索引超出范围。必须为非负数,并且小于集合的大小。

1 个答案:

答案 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++;
   }
}