Arraylist in C# does not display user-typed values

Asked

Viewed 100 times

1

I made a Arraylist in C# that shows only the name, age and course of a student . But the CS0029 error says it is not possible to implicitly convert string to paraint on line 27 and 37, before I entered the variable age had run, but showed nothing.

using System.Collections;
using static System.Console;

public class Estudante
{
    public string Nome;
    public int idade;
    public string Curso;

    public string Imprimir()
    {
        return "Nome: " + Nome + " Idade: " + idade + " Curso: " + Curso;
    }
}

public class ArrayEstudante
{
    static int Main(string[] args)
    {
        ArrayList Vetor = new ArrayList();
        Estudante estudante1 = new Estudante();

        Vetor.Add(estudante1);
        Write("Digite o nome do estudante: ");
        ((Estudante)Vetor[0]).Nome = ReadLine();
        Write("Digite a idade do estudante: ");
        ((Estudante)Vetor[0]).idade = ReadLine();
        Write("Digite o nome do curso: ");
        ((Estudante)Vetor[0]).Curso = ReadLine();

        WriteLine();

        Vetor.Add(estudante1);
        Write("Digite o nome do estudante: ");
        ((Estudante)Vetor[1]).Nome = ReadLine();
        Write("Digite a idade do estudante: ");
        ((Estudante)Vetor[1]).idade = ReadLine();
        Write("Digite o nome do curso: ");
        ((Estudante)Vetor[1]).Curso = ReadLine();

        ReadKey();
        return 0;
    }
}
  • Is there a reason to use Arraylist and not use generic Ilist?

  • The subject I’m seeing is Arraylist in POO in class, Ilist I’ve never seen.

  • the Readline entry is always of the string type, as its age is int points that, what you could was force a cast in the readline to int or call the parser, but this does not necessarily ensure that will be typed a number

1 answer

1

The ArrayList is a class used prior to the arrival of generics in C#. In Microsoft’s own documentation on the ArrayList can be found:

We do not recommend that you use the Arraylist class for the new development. Instead, we recommend that you use the generic List class

Source: Arraylist Class

I recommend you start learning in a more "right way".
You can read about Ilist.

As Lucas Miranda spoke in the comments, the function Console.ReadLine() has a return of the kind string and this implicit conversion cannot be done. The right one is you convert the result to integer and then assign it to its variable. And most likely would validate the user input.

Following your logic of reasoning, using List<T> would have a following code:

static int Main(string[] args)
{
    // Criamos uma lista de estudantes
    List<Estudante> estudantes = new List<Estudante>();

    // criamos um novo estudante
    Estudante estudante1 = new Estudante();

    // solicitamos seus dados
    Console.Write("Digite o nome do estudante: ");
    estudante1.Nome = Console.ReadLine();

    Console.Write("Digite a idade do estudante: ");
    estudante1.idade = Convert.ToInt32(Console.ReadLine());

    Console.Write("Digite o nome do curso: ");
    estudante1.Curso = Console.ReadLine();

    // terminamos de solicitar os dados, podemos adicionar na lista de estudantes
    estudantes.Add(estudante1);

    // cria o segundo estudante
    Estudante estudante2 = new Estudante();

    Console.Write("Digite o nome do estudante: ");
    estudante2.Nome = Console.ReadLine();

    Console.Write("Digite a idade do estudante: ");
    estudante2.idade = Convert.ToInt32(Console.ReadLine());

    Console.Write("Digite o nome do curso: ");
    estudante2.Curso = Console.ReadLine();

    estudantes.Add(estudante2);
}

Note that we do not cast (explicit conversion) at any time because he already knows that within this list there is an object of the type Estudante. In the case of Arraylist, you can store anything there, including, things that are not of the type Estudante.

Notice that I used Convert.ToInt32 to convert a string to inteiro thus avoiding the mistake you had.
Remembering that you should always validate what the user types.

  • The answer is not all bad, but you don’t know the effort I’m making to convince him to convert string into number the right way, now you tell him to do it the wrong way,,,

  • I get it! Actually, using an int.Tryparse would be much better or something like that. When you have time, I will edit.

  • I used if (!int.TryParse(ReadLine(), out estudante1.idade)) return 1; and if (!int.TryParse(ReadLine(), out estudante2.idade)) return 1; now the problem is this CS0246 Error: Type name or namespace name "List<>" cannot be found (using directive or Assembly reference is missing?)

  • @Carlosa. Failed to import package: System.Collections.Generic just add it to the top of the code using using

  • @Kevinkouketsu on line 21 ie List<Estudante> estudantes = new List<Estudante>(); that you made

  • @Kevinkouketsu use estudante1.Imprimir() and estudante2.Imprimir() or estudante.Imprimir()?

  • used estudante1.Imprimir() and estudante2.Imprimir() executes but does not return what was typed.

Show 2 more comments

Browser other questions tagged

You are not signed in. Login or sign up in order to post.