How to manipulate instance properties of a class that is in a List<T>?

Asked

Viewed 423 times

3

I have a class called Pessoa, this class has two properties Nome and Idade, I am using a List<T> to manipulate data, I know I can manipulate data like string or int creating a List<string> listStr or a List<int> listInt. And if I want to insert a new value of the data type corresponding to the created list just use the method Add(). For example:

listStr.Add("Minha Lista 1");

And also for the guy int:

listInt.Add(50);

However, I don’t know how to access and enter values in the properties Nome and Idade in instances of my class Pessoa who are in a List<Pessoa>, tried to use the method ListPessoa.Add(), however it seems to accept only objects of the type Pessoa. Below follows an example as an illustration of the problem:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ListaObjeto
{
    class Pessoa 
    {
        private String nome;
        private int idade;

        public Pessoa()
        {
            this.nome = String.Empty;
            this.idade = 0;
        }

        public Pessoa(string nome, int idade)
        {
            this.nome = nome;
            this.idade = idade;
        }

        public string Nome
        {
            get { return this.nome; }
            set { this.nome = value; }
        }

        public int Idade
        {
            get { return this.idade; }
            set { this.idade = value; }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            List<Pessoa> ListaPessoa = new List<Pessoa>();
            // Como acessar as propriedades Nome e Idade das instância de Pessoa que estão na ListaPessoa?            
        }
    }
}

2 answers

2

You have to create a new object of this class and add it to the list:

listaPessoa.Add(new Pessoa("João", 18));

Complete:

using static System.Console;
using System.Collections.Generic;

namespace ListaObjeto {
    public class Pessoa {
        public Pessoa() {
            Nome = "";
            Idade = 0;
        }

        public Pessoa(string nome, int idade) {
            Nome = nome;
            Idade = idade;
        }

        public string Nome { get; set; }
        public int Idade { get; set; }
    }

    public class Program {
        public static void Main(string[] args) {
            var listaPessoa = new List<Pessoa>();
            listaPessoa.Add(new Pessoa("João", 18));
            listaPessoa.Add(new Pessoa());
            foreach (var pessoa in listaPessoa) WriteLine($"Nome: {pessoa.Nome} - Idade {pessoa.Idade}");
        }
    }
}

Behold working in the ideone. And in the .NET Fiddle. Also put on the Github for future reference. I modernized the code.

  • Thanks for the reply. Stop serving the $ character before the string?

  • 1

    @Denercarvalho the character $ is part of a new functionality of version 6 of C#, this functionality is called string interpolation. Creating an "interpolated string" works in a very similar way to creating a string through the method string.Format and can generate the same result only through a code more readable and easy to write.

  • Yes, I tried to use here but the compiler pointed error, I am using the visual studio 2012.

  • @DenerCarvalho http://answall.com/q/91117/101

2


You need to create an instance of Pessoa and pass it on to the method Add of his List<Pessoa>.

See in this example how I perform some operations with your List<Pessoa>.

class Program
{
    static void Main(string[] args)
    {
        List<Pessoa> ListaPessoa = new List<Pessoa>();

        // Adicionando algumas pessoas para serem manipuladas no exemplo

        ListaPessoa.Add(new Pessoa
        {
            Nome = "Pessoa 1",
            Idade = 18
        });

        ListaPessoa.Add(new Pessoa
        {
            Nome = "Pessoa 2",
            Idade = 25
        });

        ListaPessoa.Add(new Pessoa
        {
            Nome = "Pessoa 3",
            Idade = 31
        });

        // Acessando e alterando os valores de uma pessoa que já está na lista

        // Obtém a instância da "Pessoa 2", note que estou acessando as instâncias da lista da mesma maneira que faço com um array
        var pessoa = ListaPessoa[1];

        Console.WriteLine($"Nome: {pessoa.Nome}, Idade: {pessoa.Idade}");
        // Saída: Nome: Pessoa Pessoa 2, Idade: 25

        // Alterando valores da pessoa obtida
        pessoa.Nome = "Pessoa X";
        pessoa.Idade = 99;

        Console.WriteLine($"Nome: {pessoa.Nome}, Idade: {pessoa.Idade}");
        // Saída: Nome: Pessoa X, Idade: 99
    }
}

Click here to view this same example running on . NET Fiddle

  • Thank you for the reply.

Browser other questions tagged

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