Go through Arraylist from object objects and compare them to C #

2

I was wondering how I can reuse the object that I put in an array list because I can not compare it to anything, and how do I compare an object that is inside it with another, in that college program the goal was to user to put the number of shapes he wanted and put his characteristics to me then to print everything, and I'm having difficulty just starting because I can not compare the square or rectangle object or circle with the List Forms [x], as I normally did with a array, nor is it able to remove any object from the FormForms to be able to work on it.

static void Main(string[] args)
    {
        ArrayList ListaFormas = new ArrayList();
        Quadrado quadrado = new Quadrado();
        Retangulo retangulo = new Retangulo();
        Circulo circulo = new Circulo();

        Console.WriteLine("Quantas Formas deseja criar?(quadrado,retangulo ou circulo:");

        int quantidade = int.Parse(Console.ReadLine());

        for(int x = 0; x < quantidade; x++)
        {
            Console.WriteLine("Qual forma deseja criar?:");

            string nome = Console.ReadLine();

            if(nome == "quadrado" || nome == "Quadrado")
            {
               Console.WriteLine("Entre com o Lado do quadrado:");

               double lado = double.Parse(Console.ReadLine());
               quadrado.Lado = lado;

               ListaFormas.Add(quadrado);

            }
            else if(nome =="retangulo" || nome == "Retangulo")
            {

                Console.WriteLine("Entre com o primeiro lado:");
                double lado1 = double.Parse(Console.ReadLine());
                Console.WriteLine("Entre com o segundo lado:");
                double lado2 = double.Parse(Console.ReadLine());

                retangulo.Lado1 = lado1;
                retangulo.Lado2 = lado2;

                ListaFormas.Add(retangulo);
            }
            else if(nome == "circulo" || nome == "Circulo")
            {
                Console.WriteLine("Entre com o raio do circulo:");
                double raio = double.Parse(Console.ReadLine());

                circulo.Raio = raio;

                ListaFormas.Add(circulo);
            }
            else
            {
                Console.WriteLine("Erro opcao invalida");
            }


        }

        }

    }
}
    
asked by anonymous 17.10.2017 / 12:05

1 answer

1

Simple answer

Make your list a generic type.

ListaFormas = new List<object>();

Complete answer

Square, rectangle or circle, all derive from the same type, all are Format Trigonometric, so the ideal way to get where you want is to first define what a trigonometric shape is.

public interface IFormaTrigonometrica
{
    float Altura { get; }
    float Largura { get; }
}

Then define what your abstraction will look like.

public abstract class FormaTrigonometrica : IFormaTrigonometrica
{
    public float Altura { get; protected set; }
    public float Largura { get; protected set; }

    public FormaTrigonometrica(float altura, float largura)
    {
        if(altura <= 0 || largura <= 0) throw new ArgumentException("Formas trigonometricas devem ter tamanhos superiores à zero.");

        Altura = altura;
        Largura = largura;
    }
}

So, we guarantee that any trigonometric form must have Altura and Largura valid.

Let's now define some types of trigonometric shapes. First the circle:

public class Circulo : FormaTrigonometrica
{
    public float Raio => base.Altura;

    public Circulo(float raio) : base(raio, raio)
    {
    }
}

It is defined that a Círculo is a trigonometric form, which only exists if it has a radius, which in turn is worth its height and width.

We will do the same with the Rectangle:

public class Retangulo : FormaTrigonometrica
{
    public Retangulo(float ladoA, float ladoB) : base (ladoA, ladoA) 
    {
        if(ladoA == ladoB) throw new ArgumentException("Retangulo devem ter tamanho de lados diferentes");
    }
}

And finally with Quadrado , which is nothing more than a form with equal sides.

public class Quadrado : FormaTrigonometrica
{
    public float Lado => base.Altura;

    public Quadrado(float lado) : base (lado, lado) 
    {
    }
}

Now you can have your list of trigonometric forms:

var formas = new List<IFormaTrigonometrica>();

var circulo = new Circulo(10);
var quadrado = new Quadrado(5);
var retangulo = new Retangulo(7, 3);

formas.Add(circulo);
formas.Add(quadrado);
formas.Add(retangulo);

    for(var i = 0; i < formas.Count; i++)
    {
        var forma = formas[i];
        Console.Write($"Forma[{i}] => {forma.GetType()}");

        if(forma is Circulo)
            Console.Write($" com Raio {(forma as Circulo).Raio}");

        if(forma is Quadrado)
            Console.Write($" com Lado {(forma as Quadrado).Lado}");

        if(forma is Retangulo)
            Console.Write($" com Altura {(forma as Retangulo).Altura} e Largura {(forma as Retangulo).Largura}");

        Console.WriteLine();
    }

Result:

Forma[0] => Circulo com Raio 10
Forma[1] => Quadrado com Lado 5
Forma[2] => Retangulo com Altura 7 e Largura 7

See working in .NET Fiddle .

    
17.10.2017 / 13:03