C # Convert object to an unknown list of objects

3

I have an issue here.

I have an object received by parameter. It can be a single object or list of objects (List).

How can I convert the object to a List object WITHOUT RECEIVING THE TYPE by parameter? I do not want the signed method with.

One important limitation: I'm using the 2.0 framework. So, no linq and other scripts that could help my life to be happier ... rs ...

- adding more information, here is the question itself:

public class Conversor
{

    private class MinhaClasse
    {

        private string _meuNome;
        public string MeuNome
        {
            get { return _meuNome; }
            set { _meuNome = value; }
        }

        private int _minhaIdade;
        public int MinhaIdade
        {
            get { return _minhaIdade; }
            set { _minhaIdade = value; }
        }

    }

    public Conversor()
    {

        object lista = new List<MinhaClasse>();

        // E agora, como eu faço para transformar o objeto 'lista' em List<MinhaClasse> em tempo de execução para usar em um loop, por exemplo?
        // Lembrando que eu não quero assinar o método com o tipo genérico usando <T>, porque posso ter
        // que chamar o método de forma recursivo.


    }

}

Thank you.

    
asked by anonymous 06.06.2016 / 16:57

1 answer

4

Your premise is somewhat wrong. Even if you have a object instance there is how to know the 'truth' type of this object.

At least in C #, the whole inheritance works this way: the more "top-of-the-layer" type stores what the actual type is.

This question has more details about this, even if you do not speak directly about it.

A simple example: Let's imagine the Automovel , Carro and Fusca classes. You can do the following:

Automovel auto = new Fusca();

//Aqui é possível verificar se o objeto "auto" é do tipo Fusca ou algum outro

if(auto is Fusca)
    WriteLine("É um fusca")
else if(auto is Uno)
    WriteLine("É um uno");
else
    WriteLine($"É outro tipo de carro. Tipo: { auto.GetType() }");

See in practice, applied to your example (I used a list of string , but the idea is exactly the same):

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

public class Program
{
    public static void Main()
    {
        List<string> lista = new List<string> { "1", "2" };
        object obj = new object();

        Receber(lista);
        Receber(obj);

        ReadKey();
    }

    public static void Receber(object obj)
    {
        if (obj is IList)
        {
            WriteLine("É uma lista");

            foreach (var elemento in (IList)obj)
                WriteLine(elemento);
        }
        else
        {
            WriteLine("Não é uma lista");
        }
    }
}
    
06.06.2016 / 18:19