Array
(
)

Problema ao usar o tipo dynamic

Jardel Sobrinho
   - 26 nov 2010

Estou estudando sobre o tipo dynamic e fiz um pequeno exemplo para ver como o recurso funcionava. Criei um um projeto chamado Dynamic e um formulário simples com apenas um botão. Criei uma outra classe chamada TestaFora onde adicionei um metodo chamado Lista que retorna um IList<dynamic>. Veja o código abaixo:
Classe TestaFora.cs
        public IList<dynamic> Lista()        {            IList<dynamic> l = new List<dynamic>();            l.Add(new { nome = "Jardel" });            l.Add(new { nome = "Marcos" });
            return l;        }
Codigo Evento do Botão
            TestaFora t = new TestaFora();
            IList<dynamic> lista = t.Lista();

            foreach (dynamic l in lista as dynamic)
            {
                MessageBox.Show(l.nome);
            }
Até ai tudo bem, funcionou direito, quando clico no botão ele me retorna uma caixa de mensagem com os nomes retornados pela função Lista. O problema aparece quando tento fazer isso usando dois projetos. Adicionei um outro projeto chamado PassagemParam. Então minha solução ficou com dois projetos (O projeto Dynamic e o PassagemParam). No projeto PassagemParam, criei uma classe TestaDynamic e adionei o metodo LIsta igual ao da classe TestaFora.Então alterei o codigo do evento do botão para :                TestaDynamic t = new TestaDynamic();
            IList<dynamic> lista = t.Lista();

            foreach (dynamic l in lista as dynamic)
            {
                MessageBox.Show(l.nome);
            }
Fiz as devidas referencias ao projeto e adicionei o namespace na clausula uses. O programa compila, mas ao clicar no botão surge a mensagem : "RuntimeBinderException was unhandled : 'object' does not contain a definition for 'nome'. Fazendo o debug, verifico que na variavel do foreach l, ele trás os dados corretamente, so que por algum motivo não consegue exibi-lo. Ai fica a pergunta, o tipo dynamic não funciona como retorno de método entre projetos? Devo usá-lo apenas no projeto onde foi criado?