Problema ao usar o tipo dynamic
26/11/2010
0
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?
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?
Jardel Sobrinho
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)