<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type='text/xsl' href='http://renatoguimaraes.spaces.live.com/mmm2008-07-24_12.50/rsspretty.aspx?rssquery=en-US;http%3a%2f%2frenatoguimaraes.spaces.live.com%2ffeed.rss' version='1.0'?><rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:msn="http://schemas.microsoft.com/msn/spaces/2005/rss" xmlns:live="http://schemas.microsoft.com/live/spaces/2006/rss" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Renato Guimarães</title><description>Programa de Aceleração do Conhecimento em .NET</description><link>http://renatoguimaraes.spaces.live.com/</link><language>en-US</language><pubDate>Thu, 28 Aug 2008 12:02:40 GMT</pubDate><lastBuildDate>Thu, 28 Aug 2008 12:02:40 GMT</lastBuildDate><generator>Microsoft Spaces v1.1</generator><docs>http://www.rssboard.org/rss-specification</docs><ttl>60</ttl><live:identity><live:id>2696233376832017329</live:id><live:alias>renatoguimaraes</live:alias></live:identity><image><title>Renato Guimarães</title><url>http://blufiles.storage.live.com/y1phNQrbcyQ-rUfbkjG_yLChxVUtitvv9J_n24KGsjc0yGSoWE2YRuOIYjpM96DWbmW</url><link>http://renatoguimaraes.spaces.live.com/</link></image><cf:listinfo><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="typelabel" label="Type" /><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="tag" label="Tag" /><cf:group element="category" label="Category" /><cf:sort element="pubDate" label="Date" data-type="date" default="true" /><cf:sort element="title" label="Title" data-type="string" /><cf:sort ns="http://purl.org/rss/1.0/modules/slash/" element="comments" label="Comments" data-type="number" /></cf:listinfo><item><title>[PAC.NET]: Vídeo sobre criação de query dinâmica com LINQ</title><link>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1251.entry</link><description>&lt;p&gt;  &lt;p&gt;&lt;a href="http://vjyqmg.blu.livefilestore.com/y1pS_-PDv-t8pao6quvwMGG6Tlahc4TqyX1flJAPdzpC3EvJI-6VSZKakR9FjooePGOxRiQ5z7NCKcu8mniZHf7Uw?PARTNER=WRITER"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height=183 alt=image src="http://blufiles.storage.msn.com/y1pP01j8F1nWSBzNSOQWoznzEg3EOzGp16N7cPHorfgz1LVFTWSR6X_3v5_1-by76zMHYKPrMRmhcI?PARTNER=WRITER" width=244 border=0&gt;&lt;/a&gt;  &lt;p&gt;Olá amigos,  &lt;p&gt;Há alguns dias publiquei os dois vídeos abaixo com explicando o conceito de árvores de expressão com objetivo prover as informações importantes para o entendimento deste vídeo de hoje. Durante a criação de uma expressão dinâmica é importante conhecer os métodos da classe Expression e as classes derivadas desta.  &lt;p&gt;&lt;a href="http://renatoguimaraes.spaces.live.com/blog/cns!256AF1F8919FD3B1!1245.entry"&gt;[PAC.NET]: Como criar a expressão x =&amp;gt; x - 2 dinamicamente?&lt;/a&gt; &lt;p&gt;&lt;a href="http://renatoguimaraes.spaces.live.com/blog/cns!256AF1F8919FD3B1!1244.entry"&gt;[PAC.NET]: Vídeo sobre árvores de expressão (expression trees, classe Expression)&lt;/a&gt; &lt;p&gt;Outra coisa importante, pense na sua query como uma árvore que será formada por vários nós, onde cada nó representa um expressão.  &lt;p&gt;Abaixo segue o link para o vídeo onde explico o exemplo abaixo: &lt;p&gt; &lt;blockquote&gt;&lt;a href="http://video.msn.com/video.aspx?vid=80963945-63d0-46d6-a343-57480196341d"&gt;[PAC.NET]: Vídeo sobre criação de query dinâmica com LINQ&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;span style="display:none"&gt; &lt;/span&gt; &lt;br&gt;&lt;a title="[PAC.NET]: Vídeo sobre criação de query dinâmica com LINQ" href="http://video.msn.com/video.aspx?vid=80963945-63d0-46d6-a343-57480196341d"&gt;Video: [PAC.NET]: Vídeo sobre criação de query dinâmica com LINQ&lt;/a&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;pre&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System;
&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Collections.Generic;
&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Linq;
&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Linq.Expressions;
&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Text;

&lt;span style="color:blue"&gt;namespace &lt;/span&gt;RenatoGuimaraes.Pac.Net.ExemploQueriesDinamicas
{
    &lt;span style="color:green"&gt;//Exemplo mostra como trabalhar com queries dinâmicas no LINQ to Objects. 
    //A query retornará o c cujo o modelo é um Fusca ou nome do modelo tem mais de 6 letras
    &lt;/span&gt;&lt;span style="color:blue"&gt;public class &lt;/span&gt;&lt;span style="color:#2b91af"&gt;QueriesDinamicas
    &lt;/span&gt;{
        &lt;span style="color:blue"&gt;static void &lt;/span&gt;Main(&lt;span style="color:blue"&gt;string&lt;/span&gt;[] args)
        {
            &lt;span style="color:blue"&gt;string&lt;/span&gt;[] carros = &lt;span style="color:blue"&gt;new string&lt;/span&gt;[] { 
                 &lt;span style="color:#a31515"&gt;&amp;quot;Monza&amp;quot;&lt;/span&gt;,  &lt;span style="color:#a31515"&gt;&amp;quot;Escort&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515"&gt;&amp;quot;Belina&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515"&gt;&amp;quot;Fusca&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515"&gt;&amp;quot;Brasília&amp;quot;&lt;/span&gt;, 
                &lt;span style="color:#a31515"&gt;&amp;quot;Chevette&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515"&gt;&amp;quot;Corcel I&amp;quot;&lt;/span&gt;};

            &lt;span style="color:green"&gt;//Query Expression
            &lt;/span&gt;&lt;span style="color:blue"&gt;var &lt;/span&gt;queryExp = &lt;span style="color:blue"&gt;from &lt;/span&gt;c &lt;span style="color:blue"&gt;in &lt;/span&gt;carros
                          &lt;span style="color:blue"&gt;where &lt;/span&gt;c.ToLower() == &lt;span style="color:#a31515"&gt;&amp;quot;fusca&amp;quot; &lt;/span&gt;|| c.Length &amp;gt;= 6
                          &lt;span style="color:blue"&gt;orderby &lt;/span&gt;c
                          &lt;span style="color:blue"&gt;select &lt;/span&gt;c;

            &lt;span style="color:green"&gt;//Query Methods
            &lt;/span&gt;&lt;span style="color:blue"&gt;var &lt;/span&gt;queryMethods = carros.
                Where(c =&amp;gt; c.ToLower() == &lt;span style="color:#a31515"&gt;&amp;quot;fusca&amp;quot; &lt;/span&gt;|| c.Length &amp;gt;= 6).
                OrderBy(c =&amp;gt; c);

            &lt;span style="color:green"&gt;//PASSO 1: Obtém a fonte de dados do IQueryable do provider 
            //         LINQ da coleção
            &lt;/span&gt;&lt;span style="color:#2b91af"&gt;IQueryable&lt;/span&gt;&amp;lt;&lt;span style="color:blue"&gt;string&lt;/span&gt;&amp;gt; provider = carros.AsQueryable&amp;lt;&lt;span style="color:blue"&gt;string&lt;/span&gt;&amp;gt;();

            &lt;span style="color:green"&gt;//PASSO 2: Definição do parâmetro &amp;quot;c&amp;quot; da expressão: 
            //         c =&amp;gt; c.ToLower() == &amp;quot;fusca&amp;quot; || c.Length &amp;gt;= 6
            &lt;/span&gt;&lt;span style="color:#2b91af"&gt;ParameterExpression &lt;/span&gt;param = 
                &lt;span style="color:#2b91af"&gt;Expression&lt;/span&gt;.Parameter(&lt;span style="color:blue"&gt;typeof&lt;/span&gt;(&lt;span style="color:blue"&gt;string&lt;/span&gt;), &lt;span style="color:#a31515"&gt;&amp;quot;c&amp;quot;&lt;/span&gt;);

            &lt;span style="color:green"&gt;//PASSO 3: Cria os nós esquerdo e direito da expressão 
            //         c =&amp;gt; c.ToLower() == &amp;quot;fusca&amp;quot;
            &lt;/span&gt;&lt;span style="color:#2b91af"&gt;Expression &lt;/span&gt;opEsquerdo = 
                &lt;span style="color:#2b91af"&gt;Expression&lt;/span&gt;.Call(param, 
                    &lt;span style="color:blue"&gt;typeof&lt;/span&gt;(&lt;span style="color:blue"&gt;string&lt;/span&gt;).GetMethod(&lt;span style="color:#a31515"&gt;&amp;quot;ToLower&amp;quot;&lt;/span&gt;, 
                        System.&lt;span style="color:#2b91af"&gt;Type&lt;/span&gt;.EmptyTypes));

            &lt;span style="color:#2b91af"&gt;Expression &lt;/span&gt;opDireito = &lt;span style="color:#2b91af"&gt;Expression&lt;/span&gt;.Constant(&lt;span style="color:#a31515"&gt;&amp;quot;fusca&amp;quot;&lt;/span&gt;);

            &lt;span style="color:green"&gt;//PASSO 4: Conclui a construção da primeira expressão 
            //         c.ToLower() == &amp;quot;fusca&amp;quot; com o operador ==
            &lt;/span&gt;&lt;span style="color:#2b91af"&gt;BinaryExpression &lt;/span&gt;expParte1 = 
                &lt;span style="color:#2b91af"&gt;Expression&lt;/span&gt;.Equal(opEsquerdo, opDireito);

            &lt;span style="color:green"&gt;//PASSO 5: Cria a segunda parte da expressão: c.Length &amp;gt;= 6
            &lt;/span&gt;opEsquerdo = &lt;span style="color:#2b91af"&gt;Expression&lt;/span&gt;.Property(param, &lt;span style="color:#a31515"&gt;&amp;quot;Length&amp;quot;&lt;/span&gt;);
            opDireito = &lt;span style="color:#2b91af"&gt;Expression&lt;/span&gt;.Constant(6);

            &lt;span style="color:green"&gt;//PASSO 6: Conclui a construção da segunda expressão 
            //         c.Length &amp;gt;= 6 com o operador &amp;gt;=
            &lt;/span&gt;&lt;span style="color:#2b91af"&gt;BinaryExpression &lt;/span&gt;expParte2 = 
                &lt;span style="color:#2b91af"&gt;Expression&lt;/span&gt;.GreaterThanOrEqual(opEsquerdo, opDireito);
 
            &lt;span style="color:green"&gt;//PASSO 7: Conclui a expressão completa 
            //         c =&amp;gt; c.ToLower() == &amp;quot;fusca&amp;quot; || c.Length &amp;gt;= 6 com 
            //         o operador ||
            &lt;/span&gt;&lt;span style="color:#2b91af"&gt;Expression &lt;/span&gt;expCompleta = &lt;span style="color:#2b91af"&gt;Expression&lt;/span&gt;.OrElse(expParte1, expParte2);

            &lt;span style="color:green"&gt;//PASSO 8: Cria a expressão que representa uma 
            //         chamada ao método Where do provider
            &lt;/span&gt;&lt;span style="color:#2b91af"&gt;MethodCallExpression &lt;/span&gt;expWhere = &lt;span style="color:#2b91af"&gt;Expression&lt;/span&gt;.Call(
                       &lt;span style="color:blue"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;Queryable&lt;/span&gt;), 
                       &lt;span style="color:#a31515"&gt;&amp;quot;Where&amp;quot;&lt;/span&gt;, &lt;span style="color:green"&gt;//Nome método
                       &lt;/span&gt;&lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;Type&lt;/span&gt;[] { provider.ElementType }, 
                       provider.Expression, 
                       &lt;span style="color:#2b91af"&gt;Expression&lt;/span&gt;.Lambda&amp;lt;&lt;span style="color:#2b91af"&gt;Func&lt;/span&gt;&amp;lt;&lt;span style="color:blue"&gt;string&lt;/span&gt;, &lt;span style="color:blue"&gt;bool&lt;/span&gt;&amp;gt;&amp;gt;(
                            expCompleta, &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;ParameterExpression&lt;/span&gt;[] { param })
                     );

            &lt;span style="color:green"&gt;//PASSO 9: Cria a expressão que representa uma 
            //         chamada ao método OrderyBy do provider
            &lt;/span&gt;&lt;span style="color:#2b91af"&gt;MethodCallExpression &lt;/span&gt;expOrderBy = &lt;span style="color:#2b91af"&gt;Expression&lt;/span&gt;.Call(
                       &lt;span style="color:blue"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;Queryable&lt;/span&gt;), 
                       &lt;span style="color:#a31515"&gt;&amp;quot;OrderBy&amp;quot;&lt;/span&gt;, 
                       &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;Type&lt;/span&gt;[]{provider.ElementType, provider.ElementType},
                       expWhere, 
                       &lt;span style="color:#2b91af"&gt;Expression&lt;/span&gt;.Lambda&amp;lt;&lt;span style="color:#2b91af"&gt;Func&lt;/span&gt;&amp;lt;&lt;span style="color:blue"&gt;string&lt;/span&gt;, &lt;span style="color:blue"&gt;string&lt;/span&gt;&amp;gt;&amp;gt;(
                            param, &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;ParameterExpression&lt;/span&gt;[]{param}));

            &lt;span style="color:green"&gt;//PASSO 10: Cria a query completa
            &lt;/span&gt;&lt;span style="color:#2b91af"&gt;IQueryable&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af"&gt;String&lt;/span&gt;&amp;gt; query = 
                provider.Provider.CreateQuery&amp;lt;&lt;span style="color:#2b91af"&gt;String&lt;/span&gt;&amp;gt;(expOrderBy);

            &lt;span style="color:green"&gt;//Executa e lista os itens resultantes da query
            &lt;/span&gt;&lt;span style="color:blue"&gt;foreach &lt;/span&gt;(&lt;span style="color:blue"&gt;string &lt;/span&gt;item &lt;span style="color:blue"&gt;in &lt;/span&gt;query)
            {
                &lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.WriteLine(item);
            }
            &lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.ReadLine();
        }
    }
}
&lt;/pre&gt;
&lt;p&gt;Abraço,
&lt;p&gt;Renato Guimarães, MS MVP Visual C#&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2696233376832017329&amp;page=RSS%3a+%5bPAC.NET%5d%3a+V%c3%addeo+sobre+cria%c3%a7%c3%a3o+de+query+din%c3%a2mica+com+LINQ&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=renatoguimaraes.spaces.live.com&amp;amp;GT1=renatoguimaraes"&gt;</description><category>Visual C#, 3.0, LINQ</category><comments>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1251.entry#comment</comments><guid isPermaLink="true">http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1251.entry</guid><pubDate>Thu, 28 Aug 2008 12:02:40 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://renatoguimaraes.spaces.live.com/blog/cns!256AF1F8919FD3B1!1251/comments/feed.rss</wfw:commentRss><wfw:comment>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1251.entry#comment</wfw:comment><dcterms:modified>2008-08-28T12:02:40Z</dcterms:modified></item><item><title>[OFF-TOPIC]: Oportunidades para TI em Fortaleza</title><link>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1246.entry</link><description>&lt;p&gt;Olá amigos,  &lt;p&gt;        Não é um post falando sobre algo específico relacionado a C# ou .NET, mas é do interesse da galera que trabalha com TI, especialmente, com .NET :-). E como tem C# no meio, então resolvi divulgar também :-) Peguei esta informação de um e-mail enviado por um colega. Não tenho detalhes das vagas e para mais informações recomendo navegar nos links abaixo. &lt;p&gt;         De uma coisa eu tenho certeza, Fortaleza é uma cidade maravilhosa, mesmo ainda não ter vivido a experiência de morar lá. Já estive lá outro dia fazendo palestras sobre .NET...  &lt;p&gt;A BRQ, uma das principais fornecedoras de Serviços de TI do país, certificada CMMI 5, anuncia a abertura de 116 vagas de emprego na área de Tecnologia da Informação em Fortaleza. As ofertas estão disponíveis conforme tabela abaixo e são para contratação imediata. Os interessados devem cadastrar o currículo no site &lt;a href="http://www.brq.com/recursos-humanos/vagas-fortaleza"&gt;http://www.brq.com/recursos-humanos/vagas-fortaleza&lt;/a&gt;. &lt;p&gt;&lt;a href="http://www.brq.com/vagas-fortaleza"&gt;&lt;/a&gt; &lt;p&gt;As principais tecnologias utilizadas pela BRQ são Java, J2EE, MVC, EJB, .Net, ASP, VB6.0, C#, SAP, PL/SQL, Mainframe, Websphere,C, C++, WebLogic, UML, HTML, Javascript, Webserver, Lótus Notes, PL/1, Cobol. Banco de Dados - Oracle, DB2 Metodologia - RUP/UML. Sistema Operacional: Unix, Linux, Windows, MVS, VM. &lt;p&gt;A BRQ atingiu faturamento de R$ 150 milhões em 2007, um crescimento superior a 40% ao ano desde a sua fundação em 1993 e tem como meta faturar R$ 1 bilhão em 2012. A BRQ conta com mais de 2.000 profissionais que desenvolvem e perfeiçoam soluções para diferentes áreas de negócios. &lt;p&gt;&lt;a href="http://www.brq.com/recursos-humanos/vagas-fortaleza#vaga01"&gt;Gerente de Projetos: 10 vagas&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.brq.com/recursos-humanos/vagas-fortaleza#vaga02"&gt;Líder de Configuração e Mudanças: 2 vagas&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.brq.com/recursos-humanos/vagas-fortaleza#vaga03"&gt;Arquiteto de Software Powerbuilder: 2 vagas&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.brq.com/recursos-humanos/vagas-fortaleza#vaga04"&gt;Analista de Sistemas Powerbuilder: 8 vagas&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.brq.com/recursos-humanos/vagas-fortaleza#vaga05"&gt;Arquiteto de Software .NET: 3 vagas&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.brq.com/recursos-humanos/vagas-fortaleza#vaga06"&gt;Arquiteto de Software Visual Basic e ASP: 3 vagas&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.brq.com/recursos-humanos/vagas-fortaleza#vaga07"&gt;Analista de Sistemas .Net, Visual Basic ou ASP: 12 vagas&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.brq.com/recursos-humanos/vagas-fortaleza#vaga08"&gt;Analista de Testes: 5 vagas&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.brq.com/recursos-humanos/vagas-fortaleza#vaga09"&gt;Testador de Software: 15 vagas&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.brq.com/recursos-humanos/vagas-fortaleza#vaga10"&gt;Desenvolvedor .Net, Visual Basic ou ASP: 30 vagas&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.brq.com/recursos-humanos/vagas-fortaleza#vaga11"&gt;Especialista em Suporte Técnico IBM DB2: 2 vagas&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.brq.com/recursos-humanos/vagas-fortaleza#vaga12"&gt;Especialista em Suporte Técnico IBM Rational: 2 vagas&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.brq.com/recursos-humanos/vagas-fortaleza#vaga13"&gt;Especialista em Suporte Técnico IBM Websphere: 2 vagas&lt;/a&gt; &lt;p&gt;abraço, &lt;p&gt;Renato Guimarães, MS MVP Visual C# &lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2696233376832017329&amp;page=RSS%3a+%5bOFF-TOPIC%5d%3a+Oportunidades+para+TI+em+Fortaleza&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=renatoguimaraes.spaces.live.com&amp;amp;GT1=renatoguimaraes"&gt;</description><comments>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1246.entry#comment</comments><guid isPermaLink="true">http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1246.entry</guid><pubDate>Mon, 25 Aug 2008 17:34:03 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://renatoguimaraes.spaces.live.com/blog/cns!256AF1F8919FD3B1!1246/comments/feed.rss</wfw:commentRss><wfw:comment>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1246.entry#comment</wfw:comment><dcterms:modified>2008-08-25T17:34:03Z</dcterms:modified></item><item><title>[PAC.NET]: Como criar a expressão x =&gt; x - 2 dinamicamente?</title><link>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1245.entry</link><description>&lt;p&gt;Olá amigos,  &lt;p&gt;        Segue mais um vídeo sobre árvore de expressão. No primeiro vídeo sobre árvore de expressão fiz uma breve introdução do conceito e depois fiz um exemplo onde desmembrei a expressão x =&amp;gt; x &amp;gt; 10.  Nesta segunda parte, o objetivo deste vídeo é mostrar como criar uma expressão lambda dinamicamente, por exemplo, a expressão x =&amp;gt; x - 2. Este exemplo será a base para o vídeo onde explicarei como criar queries dinamicamente no LINQ.  &lt;p&gt;        A expressão deve ser vista como um nó da árvore, onde o corpo (um BinaryExpression que representa o menos) tem seus operandos o parâmetro x (um ParameterExpression) e a constante 2 (um ConstantExpression). &lt;p&gt; &lt;blockquote&gt;&lt;a href="http://video.msn.com/video.aspx?vid=bb411b62-877a-4cbf-8dfb-43ec6556f7a7"&gt;[PAC.NET]: Como criar a express�o x = x - 2 dinamicamente?&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;span style="display:none"&gt; &lt;/span&gt; &lt;br&gt;&lt;a title="[PAC.NET]: Como criar a express�o x = x - 2 dinamicamente?" href="http://video.msn.com/video.aspx?vid=bb411b62-877a-4cbf-8dfb-43ec6556f7a7"&gt;Video: [PAC.NET]: Como criar a express�o x = x - 2 dinamicamente?&lt;/a&gt;&lt;/blockquote&gt; &lt;p&gt; &lt;p&gt;        Abaixo segue o exemplo do código que foi mostrado no vídeo. &lt;pre&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System;
&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Collections.Generic;
&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Linq;
&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Text;

&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Linq.Expressions;

&lt;span style="color:green"&gt;//ASSUNTO DE HOJE: ÁRVORES DE EXPRESSÃO
&lt;/span&gt;&lt;span style="color:blue"&gt;namespace &lt;/span&gt;RenatoGuimaraes.Videos.Pac.Net.VideoArvoreDeExpressao
{
    &lt;span style="color:green"&gt;//Expression é código em formato de dados
    //O dado é armazenado numa estrutura de árvore
    //Cada nó da árvore representa uma expressão.
    &lt;/span&gt;&lt;span style="color:blue"&gt;public class &lt;/span&gt;&lt;span style="color:#2b91af"&gt;Program &lt;/span&gt;{
        &lt;span style="color:blue"&gt;static void &lt;/span&gt;Main(&lt;span style="color:blue"&gt;string&lt;/span&gt;[] args){
           &lt;span style="color:green"&gt;// x =&amp;gt; x - 2 

            //Preparação do parãmetro da expressão
            &lt;/span&gt;&lt;span style="color:#2b91af"&gt;ParameterExpression &lt;/span&gt;paramExp = &lt;span style="color:#2b91af"&gt;Expression&lt;/span&gt;.Parameter(&lt;span style="color:blue"&gt;typeof&lt;/span&gt;(&lt;span style="color:blue"&gt;double&lt;/span&gt;), &lt;span style="color:#a31515"&gt;&amp;quot;x&amp;quot;&lt;/span&gt;);
            &lt;span style="color:green"&gt;//Definição da constante
            &lt;/span&gt;&lt;span style="color:#2b91af"&gt;ConstantExpression &lt;/span&gt;consExp = &lt;span style="color:#2b91af"&gt;Expression&lt;/span&gt;.Constant(2d);

            &lt;span style="color:green"&gt;//Criação da expressao binária que representa o operador -
            &lt;/span&gt;&lt;span style="color:#2b91af"&gt;BinaryExpression &lt;/span&gt;expMenos = &lt;span style="color:#2b91af"&gt;Expression&lt;/span&gt;.Subtract(paramExp, consExp);

            &lt;span style="color:green"&gt;//Criação da expressão lambda
            &lt;/span&gt;&lt;span style="color:#2b91af"&gt;Expression&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af"&gt;Func&lt;/span&gt;&amp;lt;&lt;span style="color:blue"&gt;double&lt;/span&gt;, &lt;span style="color:blue"&gt;double&lt;/span&gt;&amp;gt;&amp;gt; expLambda = &lt;span style="color:#2b91af"&gt;Expression&lt;/span&gt;.Lambda&amp;lt;&lt;span style="color:#2b91af"&gt;Func&lt;/span&gt;&amp;lt;&lt;span style="color:blue"&gt;double&lt;/span&gt;, &lt;span style="color:blue"&gt;double&lt;/span&gt;&amp;gt;&amp;gt;(expMenos, &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;ParameterExpression&lt;/span&gt;[] { paramExp });

            &lt;span style="color:green"&gt;//Compilação da expressão.
            &lt;/span&gt;&lt;span style="color:#2b91af"&gt;Func&lt;/span&gt;&amp;lt;&lt;span style="color:blue"&gt;double&lt;/span&gt;, &lt;span style="color:blue"&gt;double&lt;/span&gt;&amp;gt; del = expLambda.Compile();

            &lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.WriteLine(del(10));

            &lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.ReadLine();
        }
    }
}
&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;Abraço,
&lt;p&gt;&lt;strong&gt;Renato Guimarães,&lt;/strong&gt; MS MVP Visual C#&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2696233376832017329&amp;page=RSS%3a+%5bPAC.NET%5d%3a+Como+criar+a+express%c3%a3o+x+%3d%3e+x+-+2+dinamicamente%3f&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=renatoguimaraes.spaces.live.com&amp;amp;GT1=renatoguimaraes"&gt;</description><category>Visual C#, 3.0, LINQ</category><comments>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1245.entry#comment</comments><guid isPermaLink="true">http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1245.entry</guid><pubDate>Sun, 24 Aug 2008 02:40:52 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://renatoguimaraes.spaces.live.com/blog/cns!256AF1F8919FD3B1!1245/comments/feed.rss</wfw:commentRss><wfw:comment>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1245.entry#comment</wfw:comment><dcterms:modified>2008-08-24T02:40:52Z</dcterms:modified></item><item><title>[PAC.NET]: Vídeo sobre árvores de expressão (expression trees, classe Expression)</title><link>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1244.entry</link><description>&lt;p&gt;Olá amigos,  &lt;p&gt;       Entre os vários recursos do C# 3.0, um dos que mais gosto é possibilidade de criação de queries dinamicamente. Sem falar a capacidade de você estender o LINQ e criar seu próprio provider, por exemplo, hoje já temos LINQ to Amazon, LINQ to LDAP, LINQ to SQL, LINQ to XML, LINQ to Entities...  &lt;p&gt;       Antes de explicar sobre criação de queries dinâmicas, vou falar sobre um assunto que é a base de tudo: árvores de expressão, ou Expression Trees. Uma expressão é uma forma de representar código em formato de dados. Este dado é armazenado numa estrutura de árvore e cada nó representa uma expressão, ou seja, uma instância de algumas das classes derivadas da classe System.Linq.Expressions.Expression.  &lt;p&gt;        Alguns exemplos de classes de expressão são: &lt;ul&gt; &lt;li&gt;System.Linq.Expressions.ParameterExpression  &lt;li&gt;System.Linq.Expressions.ConstantExpression  &lt;li&gt;System.Linq.Expressions.BinaryExpression  &lt;li&gt;System.Linq.Expressions.LambdaExpression&lt;/ul&gt; &lt;p&gt;  &lt;p&gt;      O código abaixo mostra o desmembramento da expressão x =&amp;gt; x &amp;gt; 10, que pode ser lida da seguinte forma: &lt;p&gt;&lt;a href="http://vjyqmg.blu.livefilestore.com/y1pJxWis4k9IZp-U_2R5axu-Je7RUsp4kdTrVrUvxrusIBvZfIEEAVfmxCNp1oW5VdCvuTOTdg0T3vJOUt0qozCBg?PARTNER=WRITER"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px" height=143 alt=image src="http://blufiles.storage.msn.com/y1pg5WEI7Oie3SFdbrAdk62N5krwlh4hsE6xWT07d3nz212mTVXtQH5ZUK3-dG3kztSzVfkwYlOO-g?PARTNER=WRITER" width=422 border=0&gt;&lt;/a&gt;   &lt;p&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System;&lt;br&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Collections.Generic;&lt;br&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Linq;&lt;br&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Text;&lt;br&gt;&lt;br&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Linq.Expressions;&lt;br&gt;&lt;br&gt;&lt;span style="color:green"&gt;//ASSUNTO DE HOJE: ÁRVORES DE EXPRESSÃO&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;namespace &lt;/span&gt;RenatoGuimaraes.Videos.Pac.Net.VideoArvoreDeExpressao&lt;br&gt;{&lt;br&gt;    &lt;span style="color:green"&gt;//Expression é código em formato de dados&lt;br&gt;    //O dado é armazenado numa estrutura de árvore&lt;br&gt;    //Cada nó da árvore representa uma expressão.&lt;br&gt;   &lt;/span&gt;&lt;span style="color:blue"&gt;public class &lt;/span&gt;&lt;span style="color:#2b91af"&gt;Program&lt;br&gt;   &lt;/span&gt;{&lt;br&gt;        &lt;span style="color:blue"&gt;static void &lt;/span&gt;Main(&lt;span style="color:blue"&gt;string&lt;/span&gt;[] args)&lt;br&gt;        {&lt;br&gt;            &lt;span style="color:#2b91af"&gt;Func&lt;/span&gt;&amp;lt;&lt;span style="color:blue"&gt;double&lt;/span&gt;, &lt;span style="color:blue"&gt;bool&lt;/span&gt;&amp;gt; del = x =&amp;gt; x &amp;gt; 10;&lt;br&gt;            &lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.WriteLine(del(30));&lt;br&gt;&lt;br&gt;            &lt;span style="color:#2b91af"&gt;Expression&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af"&gt;Func&lt;/span&gt;&amp;lt;&lt;span style="color:blue"&gt;double&lt;/span&gt;, &lt;span style="color:blue"&gt;bool&lt;/span&gt;&amp;gt;&amp;gt; exp = x =&amp;gt; x &amp;gt; 10;&lt;br&gt;&lt;br&gt;            &lt;span style="color:#2b91af"&gt;BinaryExpression &lt;/span&gt;corpo = (&lt;span style="color:#2b91af"&gt;BinaryExpression&lt;/span&gt;)exp.Body;&lt;br&gt;            &lt;span style="color:#2b91af"&gt;ParameterExpression &lt;/span&gt;param = exp.Parameters[0];&lt;br&gt;            &lt;span style="color:#2b91af"&gt;ParameterExpression &lt;/span&gt;opEsquerdo = (&lt;span style="color:#2b91af"&gt;ParameterExpression&lt;/span&gt;)corpo.Left;&lt;br&gt;            &lt;span style="color:#2b91af"&gt;ConstantExpression &lt;/span&gt;opDireito = (&lt;span style="color:#2b91af"&gt;ConstantExpression&lt;/span&gt;)corpo.Right;&lt;br&gt;&lt;br&gt;            &lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515"&gt;&amp;quot;{0} =&amp;gt; {1} {2} {3}&amp;quot;&lt;/span&gt;, param.Name, opEsquerdo.Name, corpo.NodeType, opDireito.Value);&lt;br&gt;&lt;br&gt;            &lt;span style="color:#2b91af"&gt;Func&lt;/span&gt;&amp;lt;&lt;span style="color:blue"&gt;double&lt;/span&gt;, &lt;span style="color:blue"&gt;bool&lt;/span&gt;&amp;gt; lambda = exp.Compile();&lt;br&gt;&lt;br&gt;            &lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.WriteLine(lambda(10));&lt;br&gt;            &lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.ReadLine();&lt;br&gt;        }&lt;br&gt;    }&lt;br&gt;} &lt;p&gt;Abraço, &lt;p&gt;Renato Guimarães, MS MVP Visual C#&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2696233376832017329&amp;page=RSS%3a+%5bPAC.NET%5d%3a+V%c3%addeo+sobre+%c3%a1rvores+de+express%c3%a3o+(expression+trees%2c+classe+Expression)&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=renatoguimaraes.spaces.live.com&amp;amp;GT1=renatoguimaraes"&gt;</description><category>Visual C#, 3.0, LINQ</category><comments>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1244.entry#comment</comments><guid isPermaLink="true">http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1244.entry</guid><pubDate>Sun, 24 Aug 2008 02:32:56 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://renatoguimaraes.spaces.live.com/blog/cns!256AF1F8919FD3B1!1244/comments/feed.rss</wfw:commentRss><wfw:comment>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1244.entry#comment</wfw:comment><dcterms:modified>2008-08-24T02:32:56Z</dcterms:modified></item><item><title>[PAC.NET]: Vídeo sobre propriedades automáticas com Visual C# 3.0</title><link>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1241.entry</link><description>&lt;p&gt;Olá amigos, 
&lt;p&gt;Segue mais um vídeo da série de vídeos do Pac.nET. Neste vídeo de 4 minutos, explico o recurso de propriedades automáticas do Visual C# 3.0. Este recurso permite que você definda em uma linha de código uma propriedade com get e set, sem se preocupar em criar um campo privado e sem ter que digitar o corpo do get e set. 
&lt;p&gt;Quando você precisa ter um método set que executa alguma lógica de validação, por exemplo, não dá para usar este recurso. Além disso, imagine que você quer colocar algum atributo no campo privado da propriedade.. Também naõ será possível pois o campo é gerado pelo próprio compilador, um campo anônimo. &lt;span style="display:none"&gt; &lt;/span&gt;
&lt;p&gt;&lt;span style="display:none"&gt;&lt;/span&gt; 
&lt;p&gt;Por exemplo, veja o código da classe abaixo:&lt;pre&gt;&lt;span style="color:blue"&gt;class &lt;/span&gt;&lt;span style="color:#2b91af"&gt;Cliente &lt;/span&gt;{
    &lt;span style="color:blue"&gt;public &lt;/span&gt;&lt;span style="color:#2b91af"&gt;String &lt;/span&gt;Nome { &lt;span style="color:blue"&gt;get&lt;/span&gt;; &lt;span style="color:blue"&gt;set&lt;/span&gt;; }
    &lt;span style="color:blue"&gt;public &lt;/span&gt;&lt;span style="color:#2b91af"&gt;String &lt;/span&gt;Cpf { &lt;span style="color:blue"&gt;get&lt;/span&gt;; &lt;span style="color:blue"&gt;set&lt;/span&gt;; }
}&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;É equivalente ao código, com exceção dos nomes dos campos privados, que da forma acima são nomes gerados pelo próprio compilador:&lt;pre&gt;&lt;span style="color:blue"&gt;class &lt;/span&gt;&lt;span style="color:#2b91af"&gt;Cliente &lt;/span&gt;{
    &lt;span style="color:blue"&gt;private &lt;/span&gt;&lt;span style="color:#2b91af"&gt;String &lt;/span&gt;_nome;

    &lt;span style="color:blue"&gt;public &lt;/span&gt;&lt;span style="color:#2b91af"&gt;String &lt;/span&gt;Nome {
        &lt;span style="color:blue"&gt;get &lt;/span&gt;{ &lt;span style="color:blue"&gt;return &lt;/span&gt;_nome; }
        &lt;span style="color:blue"&gt;set &lt;/span&gt;{ _nome = &lt;span style="color:blue"&gt;value&lt;/span&gt;;}
    }

    &lt;span style="color:blue"&gt;private &lt;/span&gt;&lt;span style="color:#2b91af"&gt;String &lt;/span&gt;_cpf;

    &lt;span style="color:blue"&gt;public &lt;/span&gt;&lt;span style="color:#2b91af"&gt;String &lt;/span&gt;Cpf
    {
        &lt;span style="color:blue"&gt;get &lt;/span&gt;{ &lt;span style="color:blue"&gt;return &lt;/span&gt;_cpf; }
        &lt;span style="color:blue"&gt;set &lt;/span&gt;{ _cpf = &lt;span style="color:blue"&gt;value&lt;/span&gt;; }
    }
}&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;Se você analisar o código gerado pelo compilador com propriedades automáticas, temos:&lt;pre&gt;&lt;span style="color:blue"&gt;internal class &lt;/span&gt;&lt;span style="color:#2b91af"&gt;Cliente
&lt;/span&gt;{
    &lt;span style="color:green"&gt;// Fields
    &lt;/span&gt;[CompilerGenerated]
    &lt;span style="color:blue"&gt;private string &lt;/span&gt;&amp;lt;Cpf&amp;gt;k__BackingField;
    [CompilerGenerated]
    &lt;span style="color:blue"&gt;private string &lt;/span&gt;&amp;lt;Nome&amp;gt;k__BackingField;

    &lt;span style="color:green"&gt;// Properties
    &lt;/span&gt;&lt;span style="color:blue"&gt;public string &lt;/span&gt;Cpf
    {
        [CompilerGenerated]
        &lt;span style="color:blue"&gt;get
        &lt;/span&gt;{
            &lt;span style="color:blue"&gt;return this&lt;/span&gt;.&amp;lt;Cpf&amp;gt;k__BackingField;
        }
        [CompilerGenerated]
        &lt;span style="color:blue"&gt;set
        &lt;/span&gt;{
            &lt;span style="color:blue"&gt;this&lt;/span&gt;.&amp;lt;Cpf&amp;gt;k__BackingField = &lt;span style="color:blue"&gt;value&lt;/span&gt;;
        }
    }

    &lt;span style="color:blue"&gt;public string &lt;/span&gt;Nome
    {
        [CompilerGenerated]
        &lt;span style="color:blue"&gt;get
        &lt;/span&gt;{
            &lt;span style="color:blue"&gt;return this&lt;/span&gt;.&amp;lt;Nome&amp;gt;k__BackingField;
        }
        [CompilerGenerated]
        &lt;span style="color:blue"&gt;set
        &lt;/span&gt;{
            &lt;span style="color:blue"&gt;this&lt;/span&gt;.&amp;lt;Nome&amp;gt;k__BackingField = &lt;span style="color:blue"&gt;value&lt;/span&gt;;
        }
    }
}&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;abraço, 
&lt;p&gt;&lt;strong&gt;Renato Guimarães,&lt;/strong&gt; MS MVP Visual C#&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2696233376832017329&amp;page=RSS%3a+%5bPAC.NET%5d%3a+V%c3%addeo+sobre+propriedades+autom%c3%a1ticas+com+Visual+C%23+3.0&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=renatoguimaraes.spaces.live.com&amp;amp;GT1=renatoguimaraes"&gt;</description><category>Visual C#, 3.0, LINQ</category><comments>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1241.entry#comment</comments><guid isPermaLink="true">http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1241.entry</guid><pubDate>Sat, 23 Aug 2008 01:41:00 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://renatoguimaraes.spaces.live.com/blog/cns!256AF1F8919FD3B1!1241/comments/feed.rss</wfw:commentRss><wfw:comment>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1241.entry#comment</wfw:comment><dcterms:modified>2008-08-23T01:45:54Z</dcterms:modified></item><item><title>[LINK]: Um aliado na caça a duplicação de código: Clone Detective for Visual Studio.</title><link>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1208.entry</link><description>&lt;p&gt;&lt;a href="http://www.codeplex.com/CloneDetectiveVS/"&gt;&lt;img src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=CloneDetectiveVS&amp;amp;DownloadId=38772"&gt;&lt;/a&gt; &lt;p&gt;Olá,  &lt;p&gt;        Para você que se preocupa com a qualidade do seu código, gostaria de recomendar este projeto do &lt;a href="http://www.codeplex.com/CloneDetectiveVS"&gt;Codeplex: Clone Detective for Visual Studio&lt;/a&gt;. Como em alguns casos o Copy-And-Paste pode ser o mais fácil e rápido, mas tem o seu lado ruim. Utilize esta ferramenta para melhorar a qualidade do seu código... &lt;p&gt;        Embora seja o primeiro release e ainda bem recente, acredito que vale a pena umas poucas horas para testá-lo. Abaixo segue uma figura de exemplo da interface da ferramenta, bem interessante. &lt;a href="http://www.codeplex.com/CloneDetectiveVS/Release/ProjectReleases.aspx?ReleaseId=16114"&gt;Para fazer download, clique aqui&lt;/a&gt;. Ainda não testei mas dei uma olhada no &lt;a href="http://www.codeplex.com/CloneDetectiveVS/Wiki/View.aspx?title=Videos&amp;amp;referringTitle=Home"&gt;vídeo que tem uma boa explicação do que é a ferramenta e como ela funciona.&lt;/a&gt;  &lt;p&gt;&lt;img alt=ScreenshotSmall.png src="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=CloneDetectiveVS&amp;amp;DownloadId=41494"&gt; &lt;p&gt;abraço, &lt;p&gt;&lt;strong&gt;Renato Guimarães&lt;/strong&gt;, MS MVP Visual C#&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2696233376832017329&amp;page=RSS%3a+%5bLINK%5d%3a+Um+aliado+na+ca%c3%a7a+a+duplica%c3%a7%c3%a3o+de+c%c3%b3digo%3a+Clone+Detective+for+Visual+Studio.&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=renatoguimaraes.spaces.live.com&amp;amp;GT1=renatoguimaraes"&gt;</description><category>Codeplex, Links, Visual C#, .NET Framework</category><comments>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1208.entry#comment</comments><guid isPermaLink="true">http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1208.entry</guid><pubDate>Wed, 20 Aug 2008 03:26:29 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://renatoguimaraes.spaces.live.com/blog/cns!256AF1F8919FD3B1!1208/comments/feed.rss</wfw:commentRss><wfw:comment>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1208.entry#comment</wfw:comment><dcterms:modified>2008-08-20T03:26:29Z</dcterms:modified></item><item><title>[PAC.NET]: Vídeo sobre delegates, métodos anônimos, lambda expression e LINQ</title><link>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1205.entry</link><description>&lt;p&gt;&lt;font size=2&gt;Olá amigos, &lt;/font&gt; &lt;p&gt;&lt;font size=2&gt;     Retomando a minha série de vídeos do PAC.NET, hoje estou publicando um vídeo onde explico o código abaixo. O meu objetivo é mostrar como filtrar os números pares de uma coleção usando desde o Foreach até o LINQ. Ao mesmo, tempo aproveito para explicar a utilização de delegates, métodos anônimos (anonymous methods), expressões lambda (lambda expressions) e algumas queries em LINQ usando Where e Groupby, por exemplo. &lt;/font&gt; &lt;p&gt; &lt;blockquote&gt;&lt;a href="http://video.msn.com/video.aspx?vid=55674f7b-ad71-407c-b16e-8a0bdc130f96"&gt;PAC.NET: Usando m�todos an�nimos, delegates, lambda expression...&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;span style="display:none"&gt; &lt;/span&gt; &lt;br&gt;&lt;a title="PAC.NET: Usando m�todos an�nimos, delegates, lambda expression..." href="http://video.msn.com/video.aspx?vid=55674f7b-ad71-407c-b16e-8a0bdc130f96"&gt;Video: PAC.NET: Usando m�todos an�nimos, delegates, lambda expression...&lt;/a&gt;&lt;/blockquote&gt; &lt;p&gt; &lt;p&gt; &lt;pre&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System;
&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Collections.Generic;
&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Linq;
&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Text;

&lt;span style="color:blue"&gt;namespace &lt;/span&gt;RenatoGuimaraes.Videos.Pac.Net
{
    &lt;span style="color:green"&gt;//Usando do Foreach até o LINQ
    &lt;/span&gt;&lt;span style="color:blue"&gt;class &lt;/span&gt;&lt;span style="color:#2b91af"&gt;Program
    &lt;/span&gt;{
        &lt;span style="color:blue"&gt;static void &lt;/span&gt;Main(&lt;span style="color:blue"&gt;string&lt;/span&gt;[] args)
        {
            &lt;span style="color:#2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:blue"&gt;int&lt;/span&gt;&amp;gt; numeros = &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:blue"&gt;int&lt;/span&gt;&amp;gt; { 12, 24, 45, 56, 67, 98, 78, 67, 54, 90, 76};
            &lt;span style="color:#2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:blue"&gt;int&lt;/span&gt;&amp;gt; pares = &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:blue"&gt;int&lt;/span&gt;&amp;gt;();

            &lt;span style="color:green"&gt;//Usando a instrução Foreach
            &lt;/span&gt;&lt;span style="color:blue"&gt;foreach &lt;/span&gt;(&lt;span style="color:blue"&gt;int &lt;/span&gt;n &lt;span style="color:blue"&gt;in &lt;/span&gt;numeros) {
                &lt;span style="color:blue"&gt;if &lt;/span&gt;(n % 2 == 0)
                    pares.Add(n);
            }
            &lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515"&gt;&amp;quot;Usando Foreach&amp;quot;&lt;/span&gt;);
            Imprime(pares);

            &lt;span style="color:green"&gt;//Usando o FindAll e o delegate Predicate
            &lt;/span&gt;&lt;span style="color:#2b91af"&gt;Predicate&lt;/span&gt;&amp;lt;&lt;span style="color:blue"&gt;int&lt;/span&gt;&amp;gt; param = &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;Predicate&lt;/span&gt;&amp;lt;&lt;span style="color:blue"&gt;int&lt;/span&gt;&amp;gt;(IsPar);
            pares = numeros.FindAll(param);
            &lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515"&gt;&amp;quot;Usando Delegate Predicate com Método&amp;quot;&lt;/span&gt;);
            Imprime(pares);
            
            &lt;span style="color:green"&gt;//Usando o método anôniomo
            &lt;/span&gt;pares = numeros.FindAll(&lt;span style="color:blue"&gt;delegate&lt;/span&gt;(&lt;span style="color:blue"&gt;int &lt;/span&gt;n) {
                &lt;span style="color:blue"&gt;return &lt;/span&gt;(n % 2 == 0);  
            });

            &lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515"&gt;&amp;quot;Usando Método Anônimo do C# 2.0&amp;quot;&lt;/span&gt;);
            Imprime(pares);

            &lt;span style="color:green"&gt;//Usando Lambda Expression
            &lt;/span&gt;pares = numeros.FindAll(n =&amp;gt; n % 2 == 0 );

            &lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515"&gt;&amp;quot;Usando Lamba Expression&amp;quot;&lt;/span&gt;);
            Imprime(pares);

            &lt;span style="color:green"&gt;//Usando LINQ
            &lt;/span&gt;&lt;span style="color:blue"&gt;var &lt;/span&gt;query = &lt;span style="color:blue"&gt;from &lt;/span&gt;n &lt;span style="color:blue"&gt;in &lt;/span&gt;numeros
                        &lt;span style="color:blue"&gt;where &lt;/span&gt;n % 2 == 0
                        &lt;span style="color:blue"&gt;orderby &lt;/span&gt;n 
                        &lt;span style="color:blue"&gt;select &lt;/span&gt;n;

            pares = query.ToList&amp;lt;&lt;span style="color:blue"&gt;int&lt;/span&gt;&amp;gt;();
            &lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515"&gt;&amp;quot;Usando LINQ&amp;quot;&lt;/span&gt;);
            Imprime(pares);

            &lt;span style="color:blue"&gt;var &lt;/span&gt;query2 = &lt;span style="color:blue"&gt;from &lt;/span&gt;n &lt;span style="color:blue"&gt;in &lt;/span&gt;numeros
                         &lt;span style="color:blue"&gt;group &lt;/span&gt;n &lt;span style="color:blue"&gt;by &lt;/span&gt;n % 2 &lt;span style="color:blue"&gt;into &lt;/span&gt;grupo
                         &lt;span style="color:blue"&gt;where &lt;/span&gt;grupo.Count() &amp;gt;= 1
                         &lt;span style="color:blue"&gt;orderby &lt;/span&gt;grupo.Key
                         &lt;span style="color:blue"&gt;select &lt;/span&gt;grupo;

            &lt;span style="color:blue"&gt;foreach &lt;/span&gt;(&lt;span style="color:blue"&gt;var &lt;/span&gt;item &lt;span style="color:blue"&gt;in &lt;/span&gt;query2)
            {
                &lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515"&gt;&amp;quot;Grupo: {0}: &amp;quot;&lt;/span&gt;,item.Key );

                &lt;span style="color:blue"&gt;foreach &lt;/span&gt;(&lt;span style="color:blue"&gt;var &lt;/span&gt;n &lt;span style="color:blue"&gt;in &lt;/span&gt;item)
                {
                    &lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.WriteLine(n);
                }
            }

            &lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.ReadLine();
        }

        &lt;span style="color:blue"&gt;static bool &lt;/span&gt;IsPar(&lt;span style="color:blue"&gt;int &lt;/span&gt;n) { 
            &lt;span style="color:blue"&gt;return &lt;/span&gt;(n % 2 == 0);
        }

        &lt;span style="color:blue"&gt;static void &lt;/span&gt;Imprime(&lt;span style="color:#2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color:blue"&gt;int&lt;/span&gt;&amp;gt; colecao) {
            &lt;span style="color:blue"&gt;foreach &lt;/span&gt;(&lt;span style="color:blue"&gt;int &lt;/span&gt;n &lt;span style="color:blue"&gt;in &lt;/span&gt;colecao)
            {
                &lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.WriteLine(n);
            }
        }
    }
}
&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;&lt;font size=2&gt;     Há alguns dias publiquei outros posts onde falava sobre ossuntos relacionados a este vídeo:&lt;/font&gt;
&lt;p&gt;&lt;a href="http://renatoguimaraes.spaces.live.com/blog/cns!256AF1F8919FD3B1!1107.entry"&gt;&lt;font size=2&gt;[PAC.NET]: Delegate =&amp;gt; Func, Action e Predicate&lt;/font&gt;&lt;/a&gt;
&lt;p&gt;&lt;a href="http://renatoguimaraes.spaces.live.com/blog/cns!256AF1F8919FD3B1!1106.entry"&gt;&lt;font size=2&gt;[PAC.NET]: Ainda sobre &amp;quot;var&amp;quot;... Expressões para criação de arrays&lt;/font&gt;&lt;/a&gt;
&lt;p&gt;&lt;a href="http://renatoguimaraes.spaces.live.com/blog/cns!256AF1F8919FD3B1!1070.entry"&gt;&lt;font size=2&gt;[PAC.NET]: Estender um tipo sem usar herança? Como?&lt;/font&gt;&lt;/a&gt;
&lt;p&gt;&lt;a href="http://renatoguimaraes.spaces.live.com/blog/cns!256AF1F8919FD3B1!1009.entry"&gt;&lt;font size=2&gt;[PAC.NET]: Não é &amp;quot;variant&amp;quot; e nem &amp;quot;late binding&amp;quot;: A palavra-chave &amp;quot;var&amp;quot;&lt;/font&gt;&lt;/a&gt;
&lt;p&gt;&lt;a href="http://renatoguimaraes.spaces.live.com/blog/cns!256AF1F8919FD3B1!1004.entry"&gt;&lt;font size=2&gt;[PAC.NET]: Métodos Anônimos&lt;/font&gt;&lt;/a&gt;
&lt;p&gt;&lt;font size=2&gt;     Embora seja um vídeo bem simples, acredito que dá para dar uma boa introdução para quem está começando no assunto. Tenhos planos de publicar outros vídeos sobre o assunto... &lt;/font&gt;
&lt;p&gt;&lt;font size=2&gt;Abraço,&lt;/font&gt;
&lt;p&gt;&lt;font size=2&gt;Renato Guimarães, MS MVP Visual C#&lt;/font&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2696233376832017329&amp;page=RSS%3a+%5bPAC.NET%5d%3a+V%c3%addeo+sobre+delegates%2c+m%c3%a9todos+an%c3%b4nimos%2c+lambda+expression+e+LINQ&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=renatoguimaraes.spaces.live.com&amp;amp;GT1=renatoguimaraes"&gt;</description><category>Visual C#, 3.0, LINQ</category><comments>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1205.entry#comment</comments><guid isPermaLink="true">http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1205.entry</guid><pubDate>Tue, 19 Aug 2008 16:31:32 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://renatoguimaraes.spaces.live.com/blog/cns!256AF1F8919FD3B1!1205/comments/feed.rss</wfw:commentRss><wfw:comment>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1205.entry#comment</wfw:comment><dcterms:modified>2008-08-24T02:43:29Z</dcterms:modified></item><item><title>[OFF-TOPIC]: Beginner's All-purpose Symbolic Instruction Code</title><link>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1203.entry</link><description>&lt;p&gt;  &lt;p&gt;Pessoal,  &lt;p&gt;           Pura bobagem, mas só hoje eu soube o significado da palavra &amp;quot;Basic&amp;quot; do Visual Basic. Eu já sabia que a linguagem teve suas bases e premissas no BASIC, que eu, erradamente, pensava que estava relacionada a palavra &amp;quot;básico&amp;quot; do português. Mas... Na verdade o BASIC é uma sigla que significa &lt;strong&gt;Beginner's All-purpose Symbolic Instruction Code&lt;/strong&gt;, o que tem tudo a ver com linguagem.  &lt;p&gt;           Então, pode-se dizer que o nosso Visual Basic .NET é &lt;strong&gt;Visual Beginner's All-purpose Symbolic Instruction Code for .NET :-):-):-):-)&lt;/strong&gt; Desculpe-me pela bobagem.... Mas nenhum dos meus colegas que conhecem .NET, e mesmo os antigos, nunca me disseram isso.   &lt;p&gt;Abraço,  &lt;p&gt;Renato Guimarães, MS MVP Visual C#.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2696233376832017329&amp;page=RSS%3a+%5bOFF-TOPIC%5d%3a+Beginner's+All-purpose+Symbolic+Instruction+Code&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=renatoguimaraes.spaces.live.com&amp;amp;GT1=renatoguimaraes"&gt;</description><comments>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1203.entry#comment</comments><guid isPermaLink="true">http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1203.entry</guid><pubDate>Wed, 13 Aug 2008 13:59:23 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://renatoguimaraes.spaces.live.com/blog/cns!256AF1F8919FD3B1!1203/comments/feed.rss</wfw:commentRss><wfw:comment>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1203.entry#comment</wfw:comment><dcterms:modified>2008-08-13T13:59:23Z</dcterms:modified></item><item><title>[Download]: Visual Studio 2008 Service Pack 1 and .NET Framework 3.5 Service Pack 1</title><link>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1191.entry</link><description>&lt;p&gt;  &lt;p&gt;Olá pessoal,  &lt;p&gt;Para quem ainda não baixou, já está disponível a versão RTM do &lt;a href="http://msdn.microsoft.com/en-us/vstudio/products/cc533447.aspx"&gt;VS .NET 2008 SP 1 e .NET Framework Service Pack 1&lt;/a&gt;. Abaixo estão os links para o download e fique atento as instruções de instalação: &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=AB99342F-5D1A-413D-8319-81DA479AB0D7&amp;amp;displaylang=en"&gt;Visual Studio 2008 SP 1&lt;/a&gt; &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=AB99342F-5D1A-413D-8319-81DA479AB0D7&amp;amp;displaylang=en"&gt;.NET Framework 3.5 SP 1&lt;/a&gt; &lt;p&gt;&lt;strong&gt;From: &lt;a title="http://msdn.microsoft.com/en-us/vstudio/products/cc533447.aspx" href="http://msdn.microsoft.com/en-us/vstudio/products/cc533447.aspx"&gt;http://msdn.microsoft.com/en-us/vstudio/products/cc533447.aspx&lt;/a&gt;&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt; &lt;p&gt;.NET-based Windows application development benefits from increased Windows Presentation Foundation (WPF) designer performance and updated components for Visual Basic and Visual C++ (including a MFC-based Office 2007 Ribbon).  Web development improvements include enhanced the client-side script tooling (JavaScript IntelliSense). In addition to IDE performance improvements SP1 fully supports SQL Server 2008 and the ADO.NET Entity Framework.  &lt;p&gt;The .NET Framework 3.5 Service Pack 1 (SP1) delivers more controls, a streamlined setup, improved start-up performance, and powerful new graphics features for client development and rich data scaffolding, improved AJAX support, and other improvements for Web development. Additionally it introduces support for the ADO.NET Entity Framework and ADO.NET Data Services, which simplify data access code in applications by providing an extensible, conceptual model for data from any data source and enabling this model to closely reflect business requirements. &lt;p&gt;&lt;strong&gt;Visual Studio 2008 SP1 delivers: &lt;/strong&gt; &lt;ul&gt; &lt;li&gt;Improved WPF designers  &lt;li&gt;SQL Server 2008 support  &lt;li&gt;ADO.NET Entity Designer  &lt;li&gt;Visual Basic and Visual C++ components and tools (including an MFC-based Office 2007 style ‘Ribbon’)  &lt;li&gt;Visual Studio Team System Team Foundation Server (TFS) addresses customer feedback on version control usability and performance, email integration with work item tracking and full support for hosting on SQL Server 2008  &lt;li&gt;Richer JavaScript support, enhanced AJAX and data tools, and Web site deployment improvements&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;The .NET Framework 3.5 SP1 delivers:&lt;/strong&gt; &lt;ul&gt; &lt;li&gt;Performance increases between 20-45% for WPF-based applications – without having to change any code  &lt;li&gt;WCF improvements that give developers more control over the way they access data and services  &lt;li&gt;Streamlined installation experience for client applications  &lt;li&gt;Improvements in the area of data platform, such as the ADO.NET Entity Framework, ADO.NET Data Services and support for SQL Server 2008’s new features&lt;/ul&gt; &lt;p&gt;... &lt;p&gt;abraço, &lt;p&gt;Renato.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2696233376832017329&amp;page=RSS%3a+%5bDownload%5d%3a+Visual+Studio+2008+Service+Pack+1+and+.NET+Framework+3.5+Service+Pack+1&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=renatoguimaraes.spaces.live.com&amp;amp;GT1=renatoguimaraes"&gt;</description><category>Visual Studio 2008 e .NET Framework 3.5</category><comments>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1191.entry#comment</comments><guid isPermaLink="true">http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1191.entry</guid><pubDate>Mon, 11 Aug 2008 22:56:41 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://renatoguimaraes.spaces.live.com/blog/cns!256AF1F8919FD3B1!1191/comments/feed.rss</wfw:commentRss><wfw:comment>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1191.entry#comment</wfw:comment><dcterms:modified>2008-08-11T22:56:41Z</dcterms:modified></item><item><title>[LINK]: LINQ Framework Design Guidelines. Muito bom!</title><link>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1189.entry</link><description>&lt;p&gt;  &lt;p&gt;&lt;font size=2&gt;Tão bons quantos os guidelines do .NET Framework Design Guidelines, também estão os guidelines do &lt;/font&gt;&lt;a href="http://blogs.msdn.com/mirceat/archive/2008/03/13/linq-framework-design-guidelines.aspx"&gt;&lt;font size=2&gt;LINQ Framework Design Guidelines&lt;/font&gt;&lt;/a&gt;&lt;font size=2&gt;.  Para você que já está usando o LINQ nos projetos de software, vale a pena conferir as recomendações deste blog. É comum algumas empresas adotarem padrões de codificação e com este guia você pode criar mais um tópico no guia da sua empresa, assim garantirá que os programadores começarão certo... &lt;/font&gt; &lt;p&gt;&lt;font size=2&gt;Basicamente, o post começa com uma visão geral do LINQ, seguido por recomendações para extension methods, estendendo o LINQ, estendendo as interfaces IEnumerable&amp;lt;&amp;gt; e IQueryable&amp;lt;&amp;gt;, finalizando com a implementação do Padrão Queryable. Cada item classificado como DO, DO NOT, CONSIDER e AVOID.&lt;/font&gt; &lt;p&gt;&lt;font size=2&gt;Se sobrar um tempinho a mais para leitura, não deixe de visitar este blog &lt;/font&gt;&lt;a href="http://blogs.msdn.com/kcwalina/default.aspx"&gt;&lt;font size=2&gt;Krzysztof Cwalina&lt;/font&gt;&lt;/a&gt;&lt;font size=2&gt; (um dia aprender a pronunciar o nome dele) :-). É um fera no assunto...&lt;/font&gt; &lt;p&gt;&lt;font size=2&gt;abraço,&lt;/font&gt; &lt;p&gt;&lt;font size=2&gt;Renato Guimarães, MS MVP Visual C#&lt;/font&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2696233376832017329&amp;page=RSS%3a+%5bLINK%5d%3a+LINQ+Framework+Design+Guidelines.+Muito+bom!&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=renatoguimaraes.spaces.live.com&amp;amp;GT1=renatoguimaraes"&gt;</description><category>Visual C#, 3.0, LINQ</category><comments>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1189.entry#comment</comments><guid isPermaLink="true">http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1189.entry</guid><pubDate>Mon, 11 Aug 2008 03:51:17 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://renatoguimaraes.spaces.live.com/blog/cns!256AF1F8919FD3B1!1189/comments/feed.rss</wfw:commentRss><wfw:comment>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1189.entry#comment</wfw:comment><dcterms:modified>2008-08-11T03:52:10Z</dcterms:modified></item><item><title>[SEGURANÇA]: Descubra falhas de SQL Injection com Scrawlr, da HP</title><link>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1180.entry</link><description>&lt;p&gt;  &lt;p&gt;&lt;font face=ta size=2&gt;          Dando uma lida no &lt;/font&gt;&lt;a href="http://blogs.technet.com/windowsserver/archive/2008/06/24/new-guidance-and-tools-to-help-mitigate-sql-injection-attacks.aspx"&gt;&lt;font face=ta size=2&gt;Blog de Segurança da Microsoft&lt;/font&gt;&lt;/a&gt;&lt;font face=ta size=2&gt; e no &lt;/font&gt;&lt;a href="http://www.communities.hp.com/securitysoftware/blogs/spilabs/archive/2008/06/23/finding-sql-injection-with-scrawlr.aspx"&gt;&lt;font face=ta size=2&gt;Blog de Segurança da HP&lt;/font&gt;&lt;/a&gt;&lt;font face=ta size=2&gt;, vi que a HP tem uma ferramenta que pode ajudar na detecção de falhas de SQL Injection. Aproveite e leia também: &lt;a href="http://blogs.technet.com/swi/archive/2008/05/29/sql-injection-attack.aspx"&gt;SQL Injection Attack&lt;/a&gt; e &lt;a href="http://www.microsoft.com/technet/security/advisory/954462.mspx"&gt;Microsoft Security Advisory (954462)&lt;/a&gt;.Vale a pena dar uma lida neste post para entender porque as duas empresas reforçam a importante de mitigar este tipo de falha. &lt;/font&gt; &lt;p&gt;&lt;font face=ta size=2&gt;          Para baixá-la, basta acessar &lt;/font&gt;&lt;a href="https://download.spidynamics.com/products/scrawlr/"&gt;&lt;font face=ta size=2&gt;o site&lt;/font&gt;&lt;/a&gt;&lt;font face=ta size=2&gt; e preencher um formulário bem simples. Para dúvidas ou mais informações, acessar o &lt;/font&gt;&lt;a href="http://www.communities.hp.com/securitysoftware/forums/198.aspx"&gt;&lt;font face=ta size=2&gt;fórum do Scrawler&lt;/font&gt;&lt;/a&gt;&lt;font face=ta size=2&gt;. Se quiser saber mais sobre segurança, só acessar o site &lt;a href="http://www.hp.com/go/securitysoftware/"&gt;Application Security da HP&lt;/a&gt;. &lt;/font&gt; &lt;p&gt;&lt;font face=ta size=2&gt;abraço,&lt;/font&gt; &lt;p&gt;&lt;font face=ta size=2&gt;Renato Guimarães, MS MVP Visual C#&lt;/font&gt; &lt;p&gt;&lt;img height=418 src="https://download.spidynamics.com/Products/scrawlr/scrawler-screenshot.png" width=613&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2696233376832017329&amp;page=RSS%3a+%5bSEGURAN%c3%87A%5d%3a+Descubra+falhas+de+SQL+Injection+com+Scrawlr%2c+da+HP&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=renatoguimaraes.spaces.live.com&amp;amp;GT1=renatoguimaraes"&gt;</description><comments>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1180.entry#comment</comments><guid isPermaLink="true">http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1180.entry</guid><pubDate>Wed, 09 Jul 2008 22:19:13 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://renatoguimaraes.spaces.live.com/blog/cns!256AF1F8919FD3B1!1180/comments/feed.rss</wfw:commentRss><wfw:comment>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1180.entry#comment</wfw:comment><dcterms:modified>2008-07-09T22:19:13Z</dcterms:modified></item><item><title>[MVP] MVP Award em Visual C#: 2008-2009 (só alegria)</title><link>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1168.entry</link><description>&lt;p&gt;&lt;font face=taho size=2&gt;Amigos, &lt;/font&gt; &lt;p&gt;&lt;font face=taho size=2&gt;           Mais uma vez tive a felicidade de receber o MVP Award em Visual C# (2008-2009). Há um ano, exatamente no dia &lt;a href="http://renatoguimaraes.spaces.live.com/blog/cns!256AF1F8919FD3B1!812.entry"&gt;02 de Julho de 2007 eu publiquei um post&lt;/a&gt; ( manifestando minha felicidade por mais um ano. Impressionante que a felicidade foi tão grande quanto a primeira vez. &lt;/font&gt; &lt;p&gt;&lt;font face=taho size=2&gt;           Só tenho a agradecer a todos da comunidade que de uma forma ou de outra me ajudaram com mais este título. A todos que confiaram em mim e me deram oportunidade de contribuir em eventos, palestras etc. &lt;/font&gt; &lt;p&gt;&lt;font face=taho size=2&gt;           E vai meu agradecimento especial a Microsoft que a cada ano vem mostrando total seriedade e compromisso com a comunidade. É de impressionar! A dedicação deles é nossa motivação para contribuir cada vez mais e mais... &lt;/font&gt; &lt;p&gt;&lt;font face=taho size=2&gt;           Ainda não consultei a lista de todos os que renovaram ou que receberam a titulação pela primeira vez, mas gostaria de dar meus parabéns a um grande brother: &lt;a href="http://kono.spaces.msn.com"&gt;Rodrigo Kono&lt;/a&gt;. Kono, de coração, meus parabéns pelo seu título. Com certeza, você é uma pessoa que agrega muito valor a comunidade e mereceu demais este reconhecimento. Continue assim. &lt;/font&gt;&lt;font size=2&gt;Também fica meus parabéns a todos que também renovaram...&lt;/font&gt; &lt;p&gt;&lt;font face=taho size=2&gt;Abração,&lt;/font&gt; &lt;p&gt;&lt;font face=taho size=2&gt;Renato Guimarães (Feliz que só a p...), &lt;strong&gt;MS  MVP Visual C#&lt;/strong&gt;&lt;/font&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2696233376832017329&amp;page=RSS%3a+%5bMVP%5d+MVP+Award+em+Visual+C%23%3a+2008-2009+(s%c3%b3+alegria)&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=renatoguimaraes.spaces.live.com&amp;amp;GT1=renatoguimaraes"&gt;</description><category>MVP Life</category><comments>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1168.entry#comment</comments><guid isPermaLink="true">http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1168.entry</guid><pubDate>Tue, 01 Jul 2008 17:24:11 GMT</pubDate><slash:comments>3</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://renatoguimaraes.spaces.live.com/blog/cns!256AF1F8919FD3B1!1168/comments/feed.rss</wfw:commentRss><wfw:comment>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1168.entry#comment</wfw:comment><dcterms:modified>2008-07-01T17:24:11Z</dcterms:modified></item><item><title>[DOWNLOADS MICROSOFT]: Parallel Extensions to .NET Framework 3.5 June 2008 CTP</title><link>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1155.entry</link><description>&lt;p&gt;&lt;font size=2&gt;Olá amigos, &lt;/font&gt; &lt;p&gt;&lt;font size=2&gt;        Há poucos dias a Microsoft liberou o CTP de Junho 2008 (já tem um CTP em Dezembro de 2007) do &lt;strong&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=348F73FD-593D-4B3C-B055-694C50D2B0F3&amp;amp;displaylang=en"&gt;Parallel Extensions&lt;/a&gt;&lt;/strong&gt; para o .NET Framework 3.5 2008, também conhecido com PLINQ (Parallel Language Integrated Query). Para fazer o download, &lt;/font&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=348F73FD-593D-4B3C-B055-694C50D2B0F3&amp;amp;displaylang=en"&gt;&lt;strong&gt;&lt;font size=2&gt;clique aqui&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;font size=2&gt;.  Basicamente, o Parallel Extensions é um modelo de programação gerenciado para paralelismo de dados, tarefas e coordenação de trabalho paralelo executado por vários hardwares unificados por um agendador de trabalho. Como minha máquina tem dois núcleos, então vou mandar bala nos testes. Assim que eu der uma estudada publicarei minha experiência com ele.&lt;/font&gt; &lt;p&gt;&lt;font size=2&gt;        Eu já tive a oportunidade de ver uma demonstração deste framework no MVP Summit de 2007. Sensacional! Naquela época ainda não tinha qualquer CTP disponível. Pelo que vi, ele torna muito mais fácil a tarefa de escrever programas que escalam para tirar proveito do harware paralelo garantindo performance a medida que o número de processadores e núcloes aumentam. O melhor de tudo é que toda complexidade de modelo de programação concorrente é abstraído pra você. &lt;/font&gt; &lt;p&gt;&lt;font size=2&gt;        Como é um CTP, uma versão somente de testes, então vá com calma antes de pensar em adotá-lo em algum ambiente de produção, sabe-se que funcionalidades e características podem ser modificadas até a liberação da versão final. &lt;/font&gt; &lt;p&gt;&lt;font size=2&gt;        Para estudar mais sobre o assunto, vou dar uma lida nestes dois artigos: &lt;/font&gt;&lt;a href="http://www.microsoft.com/downloads/info.aspx?na=40&amp;amp;p=2&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=348f73fd-593d-4b3c-b055-694c50d2b0f3&amp;amp;u=http://msdn.microsoft.com/en-us/magazine/cc163329.aspx"&gt;&lt;strong&gt;&lt;font size=2&gt;MSDN Magazine Article: Parallel LINQ: Running Queries on Multi-Core Processors&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;font size=2&gt;&lt;strong&gt; &lt;/strong&gt;e &lt;/font&gt;&lt;a href="http://www.microsoft.com/downloads/info.aspx?na=40&amp;amp;p=3&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=348f73fd-593d-4b3c-b055-694c50d2b0f3&amp;amp;u=http://msdn.microsoft.com/en-us/magazine/cc163340.aspx"&gt;&lt;strong&gt;&lt;font size=2&gt;MSDN Magazine Article: Parallel Performance: Optimize Managed Code for Multi-Core Machines&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;font size=2&gt;. Além disso, também tem o &lt;strong&gt;&lt;a href="http://www.microsoft.com/downloads/info.aspx?na=40&amp;amp;p=1&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=348f73fd-593d-4b3c-b055-694c50d2b0f3&amp;amp;u=http://msdn.microsoft.com/en-us/concurrency/default.aspx"&gt;Microsoft Parallel Computing Developer Center&lt;/a&gt;&lt;/strong&gt;.&lt;/font&gt; &lt;p&gt;&lt;font size=2&gt;Abraço,&lt;/font&gt; &lt;p&gt;&lt;font size=2&gt;&lt;strong&gt;Renato Guimarães, MS MVP Visual C#&lt;/strong&gt;&lt;/font&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2696233376832017329&amp;page=RSS%3a+%5bDOWNLOADS+MICROSOFT%5d%3a+Parallel+Extensions+to+.NET+Framework+3.5+June+2008+CTP&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=renatoguimaraes.spaces.live.com&amp;amp;GT1=renatoguimaraes"&gt;</description><category>Visual Studio 2008 e .NET Framework 3.5</category><comments>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1155.entry#comment</comments><guid isPermaLink="true">http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1155.entry</guid><pubDate>Sun, 08 Jun 2008 01:44:13 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://renatoguimaraes.spaces.live.com/blog/cns!256AF1F8919FD3B1!1155/comments/feed.rss</wfw:commentRss><wfw:comment>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1155.entry#comment</wfw:comment><dcterms:modified>2008-06-08T01:44:13Z</dcterms:modified></item><item><title>[EVENTO]: CIAB/FEBRABAN 2008: Tecnologia e Informação. HP SOA Governance, HP SOA Quality e HP SOA Management</title><link>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1154.entry</link><description>&lt;p&gt;&lt;font size=2&gt;&lt;font face=taho&gt;&lt;font color="#333333"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;  
&lt;p&gt;&lt;font size=2&gt;&lt;font face=taho&gt;&lt;font color="#333333"&gt;Olá amigos, &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font size=2&gt;&lt;font face=taho&gt;&lt;font color="#333333"&gt;      Para quem for participar do evento &lt;a href="http://www.ciab.org.br/pt_home.asp"&gt;CIAB/FEBRABAN 2008&lt;/a&gt;, além das várias atrações deste super evento, gostaria de convidá-los a visitar o stand INTEL/HP. Entre as várias soluções e produtos da HP, gostaria de destacar as soluções SOA que eu e mais dois colegas (Osvaldo Daibert e Erik Etsushi) iremos apresentar: Governança, qualidade e testes para ambiente SOA. &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://www.ciab.org.br/pt_home.asp"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px" height=186 alt=image src="http://blufiles.storage.msn.com/y1pFsmSTZ7IGuCERxuoHvN6Yf-90aZtvMlijG5Jh1um0C1KlriNCn4f2x4V97DsFShZ4ipzhsCbkoc?PARTNER=WRITER" width=593 border=0&gt;&lt;/a&gt; 
&lt;p&gt;Começa na próxima quarta-feira, dia 11, o XIII Ciab Febraban, o maior congresso e exposição de Tecnologia da Informação (TI) do setor financeiro da América Latina. O evento já tem, confirmadas, as participações de 138 painelistas, que se apresentarão em 28 sessões, nos auditórios Febraban, Linha de Negócios e Eficiência Operacional. O tema central desta edição é “Tecnologia e Segurança”. 
&lt;p&gt;Os ministros do Desenvolvimento, Indústria e Comércio, Miguel Jorge, e da Justiça, Tarso Genro, já confirmaram participação. Além deles, deverão participar, também, os ex-ministros da Fazenda Antonio Palocci e Delfim Netto. Outros destaques do evento deverão ser o consultor da Peppers and Rogers, Don Peppers, o presidenta da Febraban, Fabio C. Barbosa, os presidentes da Oi, Luiz Eduardo Falco, e da CPM Braxis, Jair Ribeiro, o futurólogo brasileiro Jean Paul Jacob e a presidente da Caixa Econômica Federal, Maria Fernanda Ramos Coelho. 
&lt;p&gt;O evento terá início às 08h30 do próximo dia 11 (quarta-feira) e vai até o dia 13. Serão 138 painelistas, que se apresentarão em 28 sessões, nos auditórios Febraban, Linha de Negócios e Eficiência Operacional. O tema central desta edição é “Tecnologia e Segurança”. 
&lt;p&gt;Entre as personalidades presentes estão ministros de estado do Brasil, presidentes de bancos, diretores de tecnologia (CIOs), diretores de segurança (CSOs), presidentes de corporações de vários setores da economia e de tecnologia, jornalistas, consultores e conferencistas internacionais. &lt;/blockquote&gt;
&lt;p&gt;&lt;font size=2&gt;&lt;font face=taho&gt;&lt;font color="#333333"&gt;       Vocês terão oportunidade de conhecer o Business Technology Optimization (BTO) para SOA. E o que é isso? Uma solução completa e integrada para preencher o gap entre a área de TI e de negócios ajudando a: &lt;em&gt;acelerar a adoção SOA&lt;/em&gt;, &lt;em&gt;reduzir os riscos de entrega do SOA&lt;/em&gt;, &lt;em&gt;e suportar todos os desafios do Ciclo de Vida do Serviço&lt;/em&gt;. &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font size=2&gt;&lt;font face=taho&gt;&lt;font color="#333333"&gt;       Tecnologia da Informação - TI? Para HP não é só TI, e sim Business Technology - BT. Isso mesmo: Tecnologia do Negócio. TI é tão importante para o negócio que não deve ser chamado somente de Tecnologia da Informação. Como o negócio não vive sem TI, um banco por exemplo, então os resultados da área de TI são medidos com base nos resultados do negócio. Se TI não funciona, o banco (o negócio) não funciona. Resumindo, TI é tudo para o negócio. &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font size=2&gt;        A HP dispõe de um completo portfólio de produtos e serviços que podem ajudá-los a obter os benefícios (agilidade e baixo custo) prometidos pela adoção de uma arquitetura orientada a serviços. Por meio da governança, qualidade, testes e gerenciamento a HP ajuda na transformação do seu ambiente SOA. E por que HP? Só dar uma olhada no &lt;a href="http://mediaproducts.gartner.com/reprints/microsoft/vol4/article15/article15.html"&gt;quadrante mágico do Gartner&lt;/a&gt;. Também pode verificar no &lt;a href="http://searchsoa.techtarget.com/productsOfTheYearCategory/0,294802,sid26_tax310456_ayr2007,00.html"&gt;SearchSOA.com, Products of the year 2007&lt;/a&gt;, veja quem foi o campeão :-):-):-):-) &lt;a href="http://h71028.www7.hp.com/enterprise/cache/329752-0-0-0-121.html"&gt;Why HP for SOA?&lt;/a&gt; &lt;/font&gt;
&lt;p&gt;&lt;a href="http://blufiles.storage.msn.com/y1pFsmSTZ7IGuCLgq1Hpn3UmsBIPmGmLXfZizkTqEixQHwjs2aUYFjP7ALagOrVo7KmVqDHzgmShQ0?PARTNER=WRITER"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px" height=342 alt=image src="http://blufiles.storage.msn.com/y1pFsmSTZ7IGuBQexap2sEfzqHPcPkFKOi3SAqEtL_RRd8ow1zQ8salq3ODo80kXpTjJBrHVwZ65Sw?PARTNER=WRITER" width=334 border=0&gt;&lt;/a&gt; 
&lt;p&gt;&lt;font size=2&gt;&lt;font face=taho&gt;&lt;font color="#333333"&gt;         Em especial, você terá oportunidade de ouvir um pouco sobre os produtos da HP para governança, qualidade/testes de gerenciamento de ambiente SOA (Arquitetura Orientada a Serviços): &lt;a href="http://h71028.www7.hp.com/enterprise/cache/484275-0-0-225-121.html"&gt;HP SOA Governance&lt;/a&gt;, &lt;a href="http://h71028.www7.hp.com/enterprise/cache/484284-0-0-225-121.html"&gt;HP Quality&lt;/a&gt; e &lt;a href="http://h71028.www7.hp.com/enterprise/cache/484289-0-0-225-121.html"&gt;HP SOA Management&lt;/a&gt;.  Quer mais informações, então assita este vídeo na internet:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt; 
&lt;p&gt;&lt;a href="http://www.hp.com/large/soa/index.html?jumpid=in_r11374_w1/en/large/tsg/0208demo_soa_transformation"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px" height=417 alt=image src="http://blufiles.storage.msn.com/y1pFsmSTZ7IGuD2akDbIW_ifxWPssmGrUjGn0C0ZMW3C6HjtxejT8vRkmr1CVtZ1EIsDck7Jh7UQHc?PARTNER=WRITER" width=513 border=0&gt;&lt;/a&gt; 
&lt;p&gt;&lt;font size=2&gt;&lt;font face=taho&gt;&lt;font color="#333333"&gt;&lt;font size=2&gt;&lt;font face=taho&gt;&lt;font color="#333333"&gt;&lt;strong&gt;Governança SOA&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt; 
&lt;p&gt;&lt;font size=2&gt;&lt;font face=taho&gt;&lt;font color="#333333"&gt;&lt;font size=2&gt;&lt;font face=taho&gt;&lt;font color="#333333"&gt;         Governaça SOA? Sim. Pode-se dizer que é o conjunto de práticas e atividades que você utiliza para controlar os serviços de forma a garantir que tudo experado e com certo nível de qualidade. &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font size=2&gt;&lt;font face=taho&gt;&lt;font color="#333333"&gt;&lt;font size=2&gt;&lt;font face=taho&gt;&lt;font color="#333333"&gt;          SOA também traz riscos (complexidade), nem tudo é só agilidade, como é prometido. Quando se fala em SOA pensamos logo em uma modelo projetado para suportar mudanças, flexível, rápido time to market, e de baixo custo de implementação (considerando que teremos reuso etc). Por outro lado temos os riscos devido a complexidade (é amigo, não é fácil): duplicidade de código, falta de visibilidade dos serviços, pouco reuso, instabilidade, ninguém sabe onde tem serviços e o que fazem, serviços duplicados etc. &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font size=2&gt;&lt;font face=taho&gt;&lt;font color="#333333"&gt;          Em HP BTO definimos o ciclo de vida do serviço em Planejar, Entregar e Operar. Ou seja, com base nas necessidades do negócio você planeja o que será construído; depois você constrói para entregá-lo para uso; por final, opera o serviço para garantir que funcione conforme planejado e esperado pelos consumidores. E para controlar o ciclo de vida do serviço, a HP oferece as soluções ( e também serviços profissionais) necessárias para você controlar todo o ciclo de vida de forma integrada e transparente: &lt;a href="http://h71028.www7.hp.com/enterprise/cache/484275-0-0-225-121.html"&gt;HP SOA Governance&lt;/a&gt;, &lt;a href="http://h71028.www7.hp.com/enterprise/cache/484284-0-0-225-121.html"&gt;HP Quality&lt;/a&gt; e &lt;a href="http://h71028.www7.hp.com/enterprise/cache/484289-0-0-225-121.html"&gt;HP SOA Management&lt;/a&gt;. &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font size=2&gt;&lt;font face=taho&gt;&lt;font color="#333333"&gt;         O HP Governance garante visibilidade, controle e confiança dos serviços.  O HP Systinet é uma solução completa para governança e gerenciamento do ciclo de vida do serviço:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt; 
&lt;p&gt;&lt;a href="http://blufiles.storage.msn.com/y1pFsmSTZ7IGuCetimHioDkoqwsaBWHjrV-ltBS8tJz1zb_W0gVsb-9vdU3i-MeJ7AOLYo05o4NUfw?PARTNER=WRITER"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px" height=495 alt=image src="http://blufiles.storage.msn.com/y1pFsmSTZ7IGuDodZ0ozuNwXvBJgKGLBF9mGOzVcGpp0CylVpTYltfOqKoCZEfTT6Z9xIweBjT9zoU?PARTNER=WRITER" width=568 border=0&gt;&lt;/a&gt; 
&lt;p&gt;&lt;a href="http://blufiles.storage.msn.com/y1pFsmSTZ7IGuA4__khZJ2RLefHv2sRsfHREZplVboZZfW2KefIfaTj8VhzoOzbpE29-5Rn483Mp6Y?PARTNER=WRITER"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px" height=499 alt=image src="http://blufiles.storage.msn.com/y1pFsmSTZ7IGuDank74IiVFiPNbwTXz7bscGHCA_-FaObCYHEZx6mgpBpTCMff9XVf25kjQm3Ti0Z0?PARTNER=WRITER" width=573 border=0&gt;&lt;/a&gt; 
&lt;ul&gt;
&lt;li&gt;&lt;font face=Tahoma size=2&gt;Gerencia metadados, artefatos, dependências, relatório e análise de impacto;&lt;/font&gt;&lt;font face=taho&gt;&lt;font color="#333333"&gt; 
&lt;li&gt;&lt;font face=Tahoma size=2&gt;Baseado em padrões de descoberta e interoperabilidade;&lt;/font&gt; 
&lt;li&gt;&lt;font face=Tahoma size=2&gt;Gerenciamento de políticas em runtime e em construção, aplicação das políticas em execução;&lt;/font&gt; 
&lt;li&gt;&lt;font face=Tahoma size=2&gt;Controle dos acordos de uso entre os produtores e consumidores;&lt;/font&gt; 
&lt;li&gt;&lt;font face=Tahoma size=2&gt;Interopera com o ambiente SOA (&lt;/font&gt;&lt;a href="http://www.webservices.org/index.php/vendors/hp/governance_interoperability_framework_gif?topic=&amp;amp;sub="&gt;&lt;font face=Tahoma size=2&gt;Governance Interoperability Framework&lt;/font&gt;&lt;/a&gt;&lt;font face=Tahoma size=2&gt;).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/ul&gt;
&lt;p&gt;&lt;font size=2&gt;&lt;font face=taho&gt;&lt;font color="#333333"&gt;         O HP SOA Quality controla o risco da entrega do serviço, bem como a qualidade e testes. &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;a href="http://blufiles.storage.msn.com/y1pFsmSTZ7IGuADZaV_maV4sFjlALghP1sPT93u9tnzVNIZmjhTIOFpMJsifyxkT2r7Gr0vLmmkqvk?PARTNER=WRITER"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px" height=501 alt=image src="http://blufiles.storage.msn.com/y1pFsmSTZ7IGuAZiXj9u0tsXHOYqc5WTi55PLqeWd17ShpuO40Yxjm4vPB3rZ4IJMRWn2qGwkUxzGA?PARTNER=WRITER" width=575 border=0&gt;&lt;/a&gt; 
&lt;p&gt;&lt;a href="http://bkcvpg.blu.livefilestore.com/y1pfPuLZj0vf-ZuVXbQPv0s6V24KLNvsSdQHEQyqAGlRYdfVJQdxvF-rKJefUnu9GP7gKDLS7kobV8wHbgY5wyxfA?PARTNER=WRITER"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px" height=370 alt=image src="http://blu1.storage.msn.com/y1pp2uRHNESh0qm4GRF3BCknWhnrrJpcfPD60sZBW4nS6bNxuG5fEWZYEOJ-t9q4CErPhsX7UBHVwRA6uCDE5sSKZ-f16vZXcR2?PARTNER=WRITER" width=560 border=0&gt;&lt;/a&gt; 
&lt;ul&gt;
&lt;li&gt;&lt;font face=Tahoma size=2&gt;Gerencia a qualidade de serviços compostos e atômicos&lt;/font&gt; 
&lt;li&gt;&lt;font face=Tahoma size=2&gt;Teste funcional e de regressão automatizados através do arquivo WSDL usando introspecção&lt;/font&gt; 
&lt;li&gt;&lt;font face=Tahoma size=2&gt;Criação de teste e manutenção baseados em componente&lt;/font&gt; 
&lt;li&gt;&lt;font face=Tahoma size=2&gt;Garantia de desempenhode serviços individuais ou de uma aplicação composta&lt;/font&gt; 
&lt;li&gt;&lt;font face=Tahoma size=2&gt;Monitoração de serviços, isolamento de problema com rastreamento e análise de causa raiz&lt;/font&gt;&lt;/ul&gt;
&lt;p&gt;&lt;font size=2&gt;&lt;font face=taho&gt;&lt;font color="#333333"&gt;         O HP SOA Management garante as operações de entrega dos resultados do negócio. &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;a href="http://bkcvpg.blu.livefilestore.com/y1pqU59nwQwRuNB6mRwbM7njHHl_rsZGEDfV1aLyoKFhvPmTNf0sJB_VfBNxsFcZAZZlZcZTqb_lr6pjto5sBrbaiI0nJp7Ekmq?PARTNER=WRITER"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px" height=473 alt=image src="http://blufiles.storage.msn.com/y1pFsmSTZ7IGuCCnE_DPvydn898vrCR3EwcTDkwzfn_BEzi9WWwGa5XjgvL4jikq5a756pk5hoaLJU?PARTNER=WRITER" width=493 border=0&gt;&lt;/a&gt; 
&lt;p&gt;&lt;a href="http://h71028.www7.hp.com/enterprise/cache/484289-0-0-225-121.html"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px" height=357 alt=image src="http://blufiles.storage.msn.com/y1pFsmSTZ7IGuDITiCexHHbgM97UdLVxNrrMFFBvaPgslyflb1ONNc6JQK7ettFSaSWpewKMnPj6k4?PARTNER=WRITER" width=569 border=0&gt;&lt;/a&gt; 
&lt;ul&gt;
&lt;li&gt;&lt;font face=tahom size=2&gt;Monitoramento do desempenho e da disponibilidade, e do conteúdo de negócio&lt;/font&gt; 
&lt;li&gt;&lt;font face=tahom size=2&gt;Mensuração e relatório dos SLAs para as aplicações SOA&lt;/font&gt; 
&lt;li&gt;&lt;font face=tahom size=2&gt;Monitoramento do sistema SOA e da infra-estrutura&lt;/font&gt; 
&lt;li&gt;&lt;font face=tahom size=2&gt;Descoberta automática e dinâmica SOA, mapeamento e impacto de mudança&lt;/font&gt; 
&lt;li&gt;&lt;font face=tahom size=2&gt;Monitoramento da apilcação SOA, isolamento de problema com análise de causa raiz&lt;/font&gt;&lt;/ul&gt;
&lt;p&gt;&lt;font size=2&gt;&lt;/font&gt;  
&lt;p&gt;&lt;font size=2&gt;abraço,&lt;/font&gt; 
&lt;p&gt;&lt;font size=2&gt;Renato Guimarães.&lt;/font&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2696233376832017329&amp;page=RSS%3a+%5bEVENTO%5d%3a+CIAB%2fFEBRABAN+2008%3a+Tecnologia+e+Informa%c3%a7%c3%a3o.+HP+SOA+Governance%2c+HP+SOA+Quality+e+HP+SOA+Management&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=renatoguimaraes.spaces.live.com&amp;amp;GT1=renatoguimaraes"&gt;</description><category>SOA</category><comments>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1154.entry#comment</comments><guid isPermaLink="true">http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1154.entry</guid><pubDate>Fri, 06 Jun 2008 23:55:25 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://renatoguimaraes.spaces.live.com/blog/cns!256AF1F8919FD3B1!1154/comments/feed.rss</wfw:commentRss><wfw:comment>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1154.entry#comment</wfw:comment><dcterms:modified>2008-06-06T23:58:58Z</dcterms:modified></item><item><title>[EVENTO .NET]: Developers WebDays 2008: C# 3.0, LINQ, ASP.NET Web Services, WCF, Web Services Software Factory, ASP.NET MVC, Silverlight, Dynamic Data, entre outros</title><link>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1138.entry</link><description>&lt;p&gt;Olá amigos,  &lt;p&gt;         &lt;font size=2&gt;Já fez a sua inscrição para o evento &lt;strong&gt;&lt;a href="http://www.devmedia.com.br/webdays2008/" target="_blank"&gt;Developers WebDays 2008&lt;/a&gt;&lt;/strong&gt;? Então corra e faça hoje mesmo. Este é um grande evento realizado pela DevMedia, que edita a revista &lt;/font&gt;&lt;a href="http://www.devmedia.com.br/resumo/default.asp?site=1" target="_blank"&gt;&lt;font size=2&gt;.NET Magazine&lt;/font&gt;&lt;/a&gt;&lt;font size=2&gt;, e está na sua segunda edição.  Para fazer sua a inscrição &lt;a href="http://www.devmedia.com.br/webdays2008/insc.html"&gt;clique aqui&lt;/a&gt;. Não esqueça: as vagas são limitadas. E olha que mamata: pagamento em até 6x no cartão de crédito. &lt;/font&gt; &lt;p&gt;&lt;a href="http://www.devmedia.com.br/webdays2008/"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px" height=405 alt=image src="http://blufiles.storage.msn.com/y1pFsmSTZ7IGuALH_m5C7fIQYkuXVfCyIKAaANY_nzmWgIuotP9lWfqdg0gsC8lccPRiVe2kamUpiM?PARTNER=WRITER" width=587 border=0&gt;&lt;/a&gt;  &lt;p&gt;         &lt;font size=2&gt;Neste evento serão mostradas as principais novidades do .NET e, também, palestras de Boas Práticas e Arquitetura. Ao final do evento você receberá uma certificado pela participação e, o melhor de tudo, um DVD com o conteúdo do evento. Muito bom! Como não dá para participar de todas as palestras ao mesmo tempo, com o DVD você pode assistir as que não participou e rever as que participou. Ao todo são mais de 46h de conteúdo. O conteúdo está muito bom e recheado com todas as novidades do .NET: C# 3.0, LINQ, Silverlight, ASP.NET MVC, Dynamic Data, Windows Communication Foundation, ASP.NET, Web Services, entre outros. Não perca! &lt;/font&gt; &lt;p&gt;         &lt;font size=2&gt;Sobre a minha participação, ministrarei 3 palestras, descritas abaixo. Conto com a presença de você pois vou fazer questão de dar o melhor de mim para este evento. Quero ir bem preparado e com muita coisa legal para mostrar. &lt;/font&gt; &lt;p&gt;&lt;a href="http://www.devmedia.com.br/webdays2008/"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px" height=198 alt=image src="http://blufiles.storage.msn.com/y1pFsmSTZ7IGuBZOUUv0zY5ECxp2c7zGmqkl77cnQuHBaKiS_b_22OTqJhyBUmVxoH8GGRMXdLvz28?PARTNER=WRITER" width=539 align=left border=0&gt;&lt;/a&gt;  &lt;p&gt;  &lt;p&gt;  &lt;p&gt;  &lt;p&gt;  &lt;p&gt;  &lt;p&gt;  &lt;p&gt;           &lt;font size=2&gt;Dos assuntos que irei apresentar, sinta-se a vontade para já mandar perguntas ou sugestões para o dia do evento. &lt;/font&gt; &lt;p&gt;&lt;font size=2&gt;Grande abraço e espero vocês,&lt;/font&gt; &lt;p&gt;&lt;font size=2&gt;&lt;strong&gt;Renato Guimarães, MS MVP Visual C#&lt;/strong&gt;&lt;/font&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2696233376832017329&amp;page=RSS%3a+%5bEVENTO+.NET%5d%3a+Developers+WebDays+2008%3a+C%23+3.0%2c+LINQ%2c+ASP.NET+Web+Services%2c+WCF%2c+Web+Services+Software+Factory%2c+ASP.NET+MVC%2c+Silverlight%2c+Dynamic+Data%2c+entre+outros&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=renatoguimaraes.spaces.live.com&amp;amp;GT1=renatoguimaraes"&gt;</description><category>C# 3.0, .NET Framework 3.5, ASP.NET, LINQ, WCF, WF, WPF, Silverlight</category><comments>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1138.entry#comment</comments><guid isPermaLink="true">http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1138.entry</guid><pubDate>Fri, 06 Jun 2008 22:01:48 GMT</pubDate><slash:comments>3</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://renatoguimaraes.spaces.live.com/blog/cns!256AF1F8919FD3B1!1138/comments/feed.rss</wfw:commentRss><wfw:comment>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1138.entry#comment</wfw:comment><dcterms:modified>2008-06-06T22:01:48Z</dcterms:modified></item><item><title>[PAC.NET]: Muito mais fácil ter uma coleção com Iterators - O compilador faz o resto...</title><link>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1134.entry</link><description>&lt;p&gt;&lt;font face=taho size=2&gt;Olá amigos, &lt;/font&gt; &lt;p&gt;&lt;font face=taho size=2&gt;      Hoje gostaria de falar sobre um assunto que, embora seja do C# 2.0, é de grande importância para execução das consultas em LINQ: Iterators. O que é isso? Lembra quando você necessitava de uma coleção customizada com suporte a instrução foreach: normalmente implementava IEnumerable e IEnumerator, por exemplo. Sei que com a chegada do recurso de Generics (outra maravilha) também facilitou nossa vida no que diz a criação de coleções.  &lt;/font&gt; &lt;p&gt;&lt;font face=taho size=2&gt;       Pois bem, o recurso de Iterators permite que você tenha um método, um &lt;strong&gt;get&lt;/strong&gt; ou um operador que faça uma iteração customizada sobre uma coleção ou um array usando uma &amp;quot;palavrinha mágica&amp;quot; chamada &lt;strong&gt;yield&lt;/strong&gt; (em português pode ser produzir, ceder, deferir ou render). Ou seja, é um bloco de código que produz uma sequência de valores do mesmo tipo. É bem fácil reconhecê-lo pois sempre estará acompanhado da instrução &lt;strong&gt;yield&lt;/strong&gt; (que pode aparecer uma ou várias vezes). &lt;/font&gt; &lt;p&gt;&lt;font size=2&gt;       No exemplo abaixo, temos a classe TesteIterator que usa o recurso de iterator e do yield, fazendo com que implemente IEnumerable (também poderia usar o IEnumerable&amp;lt;T&amp;gt;), retornando um IEnumerator. Com isso, esta classe pode ser usada numa instrução foreach, por exemplo. Perceba que não preciso me preocupar em criar uma coleção do tipo que está sendo retornado pois, implicitamente, o compilador já resolveu tudo para mim: internamente ele implementa a devida coleção.  Eu também poderia implementar IEnumerable (ou IEnumerable&amp;lt;T&amp;gt;) explicitamente e, também, implementar qualquer outra.&lt;/font&gt;&lt;pre&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System;
&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Collections;

&lt;span style="color:blue"&gt;namespace &lt;/span&gt;PostsMSN.Samples.ExemploSimplesIterator{

    &lt;span style="color:blue"&gt;class &lt;/span&gt;&lt;span style="color:#2b91af"&gt;TesteIterator &lt;/span&gt;{
        &lt;span style="color:green"&gt;//Uma instância da classe pode ser navegada com um foreach
        // porque o método é o GetEnumerator de IEnumerable.
        //Compilador gera uma classe interna que atende todos os requistos para 
        //implementar IEnumerable e IEnumerator (também com versão generic) e 
        //que funciona como uma máquina de estados. 
        &lt;/span&gt;&lt;span style="color:blue"&gt;public &lt;/span&gt;&lt;span style="color:#2b91af"&gt;IEnumerator &lt;/span&gt;GetEnumerator(){
            &lt;span style="color:blue"&gt;for &lt;/span&gt;(&lt;span style="color:blue"&gt;int &lt;/span&gt;i = 1; i &amp;lt;= 10; i++){
                &lt;span style="color:blue"&gt;yield return &lt;/span&gt;i;
            }
        }

        &lt;span style="color:green"&gt;//Para um método com nome específico, deve-se retornar IEnumerable
        //para que seja usado num foreach, por exemplo
        &lt;/span&gt;&lt;span style="color:blue"&gt;public &lt;/span&gt;&lt;span style="color:#2b91af"&gt;IEnumerable &lt;/span&gt;GetOrdemDecrescente() {
            &lt;span style="color:blue"&gt;for &lt;/span&gt;(&lt;span style="color:blue"&gt;int &lt;/span&gt;i = 10; i &amp;gt;= 1; i--){
                &lt;span style="color:blue"&gt;yield return &lt;/span&gt;i;
            }        
        }
    }

    &lt;span style="color:blue"&gt;class &lt;/span&gt;&lt;span style="color:#2b91af"&gt;Program&lt;/span&gt;{
        &lt;span style="color:blue"&gt;static void &lt;/span&gt;Main(&lt;span style="color:blue"&gt;string&lt;/span&gt;[] args){
            &lt;span style="color:#2b91af"&gt;TesteIterator &lt;/span&gt;t = &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;TesteIterator&lt;/span&gt;();
            &lt;span style="color:blue"&gt;foreach &lt;/span&gt;(&lt;span style="color:blue"&gt;int &lt;/span&gt;i &lt;span style="color:blue"&gt;in &lt;/span&gt;t){
                &lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.WriteLine(i);
            }

            &lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.WriteLine();

            &lt;span style="color:#2b91af"&gt;IEnumerable &lt;/span&gt;colecao = t.GetOrdemDecrescente();
            &lt;span style="color:blue"&gt;foreach &lt;/span&gt;(&lt;span style="color:blue"&gt;int &lt;/span&gt;i &lt;span style="color:blue"&gt;in &lt;/span&gt;colecao){
                &lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.WriteLine(i);
            }

            &lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.ReadLine();
        }
    }
}&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;&lt;font face=taho size=2&gt;      Abaixo segue o código que é gerado pelo compilador. Para não ficar tão grande, só tem as classes sem o conteúdo de cada método: &lt;/font&gt;&lt;pre&gt;&lt;span style="color:blue"&gt;internal class &lt;/span&gt;&lt;span style="color:#2b91af"&gt;TesteIterator
&lt;/span&gt;{
    &lt;span style="color:green"&gt;// Methods
    &lt;/span&gt;&lt;span style="color:blue"&gt;public &lt;/span&gt;TesteIterator();
    &lt;span style="color:blue"&gt;public &lt;/span&gt;IEnumerator GetEnumerator();
    &lt;span style="color:blue"&gt;public &lt;/span&gt;IEnumerable GetOrdemDecrescente();

    &lt;span style="color:green"&gt;// Nested Types
    &lt;/span&gt;[CompilerGenerated]
    &lt;span style="color:blue"&gt;private sealed class &lt;/span&gt;&amp;lt;GetEnumerator&amp;gt;d__0 : 
            IEnumerator&amp;lt;&lt;span style="color:blue"&gt;object&lt;/span&gt;&amp;gt;, IEnumerator, IDisposable
    {
        &lt;span style="color:green"&gt;// Fields
        &lt;/span&gt;&lt;span style="color:blue"&gt;private int &lt;/span&gt;&amp;lt;&amp;gt;1__state;
        &lt;span style="color:blue"&gt;private object &lt;/span&gt;&amp;lt;&amp;gt;2__current;
        &lt;span style="color:blue"&gt;public &lt;/span&gt;TesteIterator &amp;lt;&amp;gt;4__this;
        &lt;span style="color:blue"&gt;public int &lt;/span&gt;&amp;lt;i&amp;gt;5__1;

        &lt;span style="color:green"&gt;// Methods
        &lt;/span&gt;[DebuggerHidden]
        &lt;span style="color:blue"&gt;public &lt;/span&gt;&amp;lt;GetEnumerator&amp;gt;d__0(&lt;span style="color:blue"&gt;int &lt;/span&gt;&amp;lt;&amp;gt;1__state);
        &lt;span style="color:blue"&gt;private bool &lt;/span&gt;MoveNext();
        [DebuggerHidden]
        &lt;span style="color:blue"&gt;void &lt;/span&gt;IEnumerator.Reset();
        &lt;span style="color:blue"&gt;void &lt;/span&gt;IDisposable.Dispose();

        &lt;span style="color:green"&gt;// Properties
        &lt;/span&gt;&lt;span style="color:blue"&gt;object &lt;/span&gt;IEnumerator&amp;lt;&lt;span style="color:blue"&gt;object&lt;/span&gt;&amp;gt;.Current { [DebuggerHidden] &lt;span style="color:blue"&gt;get&lt;/span&gt;; }
        &lt;span style="color:blue"&gt;object &lt;/span&gt;IEnumerator.Current { [DebuggerHidden] &lt;span style="color:blue"&gt;get&lt;/span&gt;; }
    }

    [CompilerGenerated]
    &lt;span style="color:blue"&gt;private sealed class &lt;/span&gt;&amp;lt;GetOrdemDecrescente&amp;gt;d__3 : 
        IEnumerable&amp;lt;&lt;span style="color:blue"&gt;object&lt;/span&gt;&amp;gt;, IEnumerable, 
        IEnumerator&amp;lt;&lt;span style="color:blue"&gt;object&lt;/span&gt;&amp;gt;, IEnumerator, IDisposable
    {
        &lt;span style="color:green"&gt;// Fields
        &lt;/span&gt;&lt;span style="color:blue"&gt;private int &lt;/span&gt;&amp;lt;&amp;gt;1__state;
        &lt;span style="color:blue"&gt;private object &lt;/span&gt;&amp;lt;&amp;gt;2__current;
        &lt;span style="color:blue"&gt;public &lt;/span&gt;TesteIterator &amp;lt;&amp;gt;4__this;
        &lt;span style="color:blue"&gt;private int &lt;/span&gt;&amp;lt;&amp;gt;l__initialThreadId;
        &lt;span style="color:blue"&gt;public int &lt;/span&gt;&amp;lt;i&amp;gt;5__4;

        &lt;span style="color:green"&gt;// Methods
        &lt;/span&gt;[DebuggerHidden]
        &lt;span style="color:blue"&gt;public &lt;/span&gt;&amp;lt;GetOrdemDecrescente&amp;gt;d__3(&lt;span style="color:blue"&gt;int &lt;/span&gt;&amp;lt;&amp;gt;1__state);
        &lt;span style="color:blue"&gt;private bool &lt;/span&gt;MoveNext();
        [DebuggerHidden]
        &lt;span style="color:#2b91af"&gt;IEnumerator&lt;/span&gt;&amp;lt;&lt;span style="color:blue"&gt;object&lt;/span&gt;&amp;gt; IEnumerable&amp;lt;&lt;span style="color:blue"&gt;object&lt;/span&gt;&amp;gt;.GetEnumerator();
        [DebuggerHidden]
        &lt;span style="color:#2b91af"&gt;IEnumerator &lt;/span&gt;IEnumerable.GetEnumerator();
        [DebuggerHidden]
        &lt;span style="color:blue"&gt;void &lt;/span&gt;IEnumerator.Reset();
        &lt;span style="color:blue"&gt;void &lt;/span&gt;IDisposable.Dispose();

        &lt;span style="color:green"&gt;// Properties
        &lt;/span&gt;&lt;span style="color:blue"&gt;object &lt;/span&gt;IEnumerator&amp;lt;&lt;span style="color:blue"&gt;object&lt;/span&gt;&amp;gt;.Current { [DebuggerHidden] &lt;span style="color:blue"&gt;get&lt;/span&gt;; }
        &lt;span style="color:blue"&gt;object &lt;/span&gt;IEnumerator.Current { [DebuggerHidden] &lt;span style="color:blue"&gt;get&lt;/span&gt;; }
    }
}&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;&lt;font face=taho size=2&gt;       Quando um método de uma classe retorna uma IEnumerator usando um bloco de  iterator, o fato de executar o método não que dizer que o código do bloco do iterator será executado automaticamente, somente um objeto enumerator é criado e retornado. Este objeto encapsula o código especificado no bloco do iterator, e a execução só acontecerá quando o método MoveNext() for executado. O objeto retornado tem as seguintes características: &lt;em&gt;implementa IEnumerator e IEnumerator&amp;lt;T&amp;gt;, onde T é o tipo do bloco do iterator; implementa IDisposable; e é inicializado com uma cópia dos argumentos (se existir) e valores da instância passado para o método; e tem quatro estados básicos: antes (iniciado neste estado), executando, suspenso e depois.&lt;/em&gt; Por exemplo, na classe gerada pelo compilador, o conteúdo do método MoveNext():&lt;/font&gt;&lt;pre&gt;&lt;span style="color:blue"&gt;private bool &lt;/span&gt;MoveNext()
{
    &lt;span style="color:blue"&gt;switch &lt;/span&gt;(&lt;span style="color:blue"&gt;this&lt;/span&gt;.&amp;lt;&amp;gt;1__state)
    {
        &lt;span style="color:blue"&gt;case &lt;/span&gt;0:
            &lt;span style="color:blue"&gt;this&lt;/span&gt;.&amp;lt;&amp;gt;1__state = -1;
            &lt;span style="color:blue"&gt;this&lt;/span&gt;.&amp;lt;i&amp;gt;5__1 = 1;
            &lt;span style="color:blue"&gt;while &lt;/span&gt;(&lt;span style="color:blue"&gt;this&lt;/span&gt;.&amp;lt;i&amp;gt;5__1 &amp;lt;= 10)
            {
                &lt;span style="color:blue"&gt;this&lt;/span&gt;.&amp;lt;&amp;gt;2__current = &lt;span style="color:blue"&gt;this&lt;/span&gt;.&amp;lt;i&amp;gt;5__1;
                &lt;span style="color:blue"&gt;this&lt;/span&gt;.&amp;lt;&amp;gt;1__state = 1;
                &lt;span style="color:blue"&gt;return true&lt;/span&gt;;
            Label_004B:
                &lt;span style="color:blue"&gt;this&lt;/span&gt;.&amp;lt;&amp;gt;1__state = -1;
                &lt;span style="color:blue"&gt;this&lt;/span&gt;.&amp;lt;i&amp;gt;5__1++;
            }
            &lt;span style="color:blue"&gt;break&lt;/span&gt;;

        &lt;span style="color:blue"&gt;case &lt;/span&gt;1:
            &lt;span style="color:blue"&gt;goto &lt;/span&gt;Label_004B;
    }
    &lt;span style="color:blue"&gt;return false&lt;/span&gt;;
}&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;&lt;font size=2&gt;       Quando um método de um classe retorna um IEnumerable usando um bloco de iterator, o fator de executar o método não quer dizer que o código do bloco do iterator será executado automaticamente, somente um objeto enumerable é criado e retornado (mesmo caso do Enumerator).&lt;/font&gt;&lt;font size=2&gt; O método GetEnumerator() do objeto enumerable retorna um objeto enumerator que encapsula o código do bloco do iterator, e a execução ocorre quando o método MoveNext do enumerator é executado. &lt;/font&gt;
&lt;p&gt;&lt;font size=2&gt;     Abaixo segue um exemplo dando uma geral nas regras de uso da instrução yield:&lt;/font&gt;&lt;pre&gt;&lt;span style="color:blue"&gt;delegate &lt;/span&gt;IEnumerable&amp;lt;&lt;span style="color:#2b91af"&gt;String&lt;/span&gt;&amp;gt; &lt;span style="color:#2b91af"&gt;TesteYield&lt;/span&gt;();

    &lt;span style="color:blue"&gt;class &lt;/span&gt;&lt;span style="color:#2b91af"&gt;TesteIterator &lt;/span&gt;{
        &lt;span style="color:blue"&gt;public &lt;/span&gt;&lt;span style="color:#2b91af"&gt;IEnumerator &lt;/span&gt;GetEnumerator(){
            &lt;span style="color:blue"&gt;try&lt;/span&gt;{
                &lt;span style="color:blue"&gt;yield return &lt;/span&gt;1; &lt;span style="color:green"&gt;// Funciona OK.
                &lt;/span&gt;&lt;span style="color:blue"&gt;yield break&lt;/span&gt;;    &lt;span style="color:green"&gt;// Funciona OK.
            &lt;/span&gt;}&lt;span style="color:blue"&gt;finally&lt;/span&gt;{
                &lt;span style="color:blue"&gt;yield return &lt;/span&gt;2; &lt;span style="color:green"&gt;// Erro. Não pode usar no finally
                &lt;/span&gt;&lt;span style="color:blue"&gt;yield break&lt;/span&gt;;    &lt;span style="color:green"&gt;// Erro. Não pode usar no finally
            &lt;/span&gt;}

            &lt;span style="color:blue"&gt;try&lt;/span&gt;{
                &lt;span style="color:blue"&gt;yield return &lt;/span&gt;3; &lt;span style="color:green"&gt;// Erro. Não pode usar try...catch
                &lt;/span&gt;&lt;span style="color:blue"&gt;yield break&lt;/span&gt;;    &lt;span style="color:green"&gt;// Funciona OK.
            &lt;/span&gt;}&lt;span style="color:blue"&gt;catch&lt;/span&gt;{
                &lt;span style="color:blue"&gt;yield return &lt;/span&gt;4; &lt;span style="color:green"&gt;// Erro. Não pode usar try...catch
                &lt;/span&gt;&lt;span style="color:blue"&gt;yield break&lt;/span&gt;;    &lt;span style="color:green"&gt;// Funciona OK.
            &lt;/span&gt;}
            &lt;span style="color:green"&gt;// Erro. Não pode usar com Método Anônimo
            &lt;/span&gt;&lt;span style="color:#2b91af"&gt;TesteYield &lt;/span&gt;del = &lt;span style="color:blue"&gt;delegate &lt;/span&gt;{ &lt;span style="color:blue"&gt;yield return &lt;/span&gt;5; };   
        }

        &lt;span style="color:green"&gt;//Erro. int não é válido para um bloco iterator, lembra?
        //Somente IEnumerator, IEnumerator&amp;lt;T&amp;gt;, IEnumerable, IEnumerable&amp;lt;T&amp;gt;
        &lt;/span&gt;&lt;span style="color:blue"&gt;int &lt;/span&gt;Metodo() {
            &lt;span style="color:blue"&gt;yield return &lt;/span&gt;100; 
        }
    }&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;&lt;font face=taho size=2&gt;      Existem algumas restrições sobre os Iterators: &lt;/font&gt;
&lt;ul&gt;
&lt;li&gt;&lt;font face=taho size=2&gt;Quando usado num método com parâmetros, nenhum dos parâmetros pode ser declarado como ref ou out;&lt;/font&gt; 
&lt;li&gt;&lt;font size=2&gt;Não pode aparecer a instrução &lt;strong&gt;return&lt;/strong&gt;, mas pode ter um &lt;strong&gt;yield return&lt;/strong&gt;;&lt;/font&gt; 
&lt;li&gt;&lt;font size=2&gt;Não pode conter contextos unsafe, pois sempre define um contexto safe, mesmo quando a declaração é feita dentro de um contexto &lt;strong&gt;unsafe.&lt;/strong&gt;&lt;/font&gt;&lt;/ul&gt;
&lt;p&gt;&lt;font size=2&gt;     Para fecharmos, mais um exemplo com a implementação de uma pilha e usando o recurso de iterators (de quebra também usa Generics):&lt;/font&gt;&lt;pre&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System;
&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Collections;
&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Collections.Generic;


&lt;span style="color:blue"&gt;namespace &lt;/span&gt;PostsMSN.Samples.ExemploPilhaComIterator{

    &lt;span style="color:blue"&gt;public class &lt;/span&gt;&lt;span style="color:#2b91af"&gt;PilhaIterator&lt;/span&gt;&amp;lt;T&amp;gt; {
        T[] itens;
        &lt;span style="color:blue"&gt;int &lt;/span&gt;contador;

        &lt;span style="color:green"&gt;//Coloca item na pilha
        &lt;/span&gt;&lt;span style="color:blue"&gt;public void &lt;/span&gt;Push(T item) {
            &lt;span style="color:green"&gt;//Inicializa caso seja null
            &lt;/span&gt;&lt;span style="color:blue"&gt;if &lt;/span&gt;(itens == &lt;span style="color:blue"&gt;null&lt;/span&gt;){
                itens = &lt;span style="color:blue"&gt;new &lt;/span&gt;T[10];
            &lt;span style="color:green"&gt;//Se chegou em 10, cria novo array com o dobro da qtd
            &lt;/span&gt;}&lt;span style="color:blue"&gt;else if &lt;/span&gt;(itens.Length == contador){
                T[] novoArray = &lt;span style="color:blue"&gt;new &lt;/span&gt;T[contador * 2];
                &lt;span style="color:#2b91af"&gt;Array&lt;/span&gt;.Copy(itens, 0, novoArray, 0, contador);
                itens = novoArray;
            }
            itens[contador++] = item;
        }

        &lt;span style="color:green"&gt;//Remove item do topo da pilha
        &lt;/span&gt;&lt;span style="color:blue"&gt;public &lt;/span&gt;T Pop() {
            T retorno = itens[--contador];
            itens[contador] = &lt;span style="color:blue"&gt;default&lt;/span&gt;(T);
            &lt;span style="color:blue"&gt;return &lt;/span&gt;retorno;
        }

        &lt;span style="color:blue"&gt;public &lt;/span&gt;&lt;span style="color:#2b91af"&gt;IEnumerator&lt;/span&gt;&amp;lt;T&amp;gt; GetEnumerator() {
            &lt;span style="color:blue"&gt;for &lt;/span&gt;(&lt;span style="color:blue"&gt;int &lt;/span&gt;i = contador - 1; i &amp;gt;= 0; i--){
                &lt;span style="color:blue"&gt;yield return &lt;/span&gt;itens[i];
            }
        }
    }

    &lt;span style="color:blue"&gt;class &lt;/span&gt;&lt;span style="color:#2b91af"&gt;Program&lt;/span&gt;{
        &lt;span style="color:blue"&gt;static void &lt;/span&gt;Main(&lt;span style="color:blue"&gt;string&lt;/span&gt;[] args){
            &lt;span style="color:#2b91af"&gt;PilhaIterator&lt;/span&gt;&amp;lt;&lt;span style="color:blue"&gt;int&lt;/span&gt;&amp;gt; pilha = &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;PilhaIterator&lt;/span&gt;&amp;lt;&lt;span style="color:blue"&gt;int&lt;/span&gt;&amp;gt;();
            pilha.Push(10);
            pilha.Push(9);
            pilha.Push(8);
            pilha.Push(7);
            pilha.Push(6);
            pilha.Push(5);
            pilha.Push(4);
            pilha.Push(3);
            pilha.Push(2);
            pilha.Push(1);

            &lt;span style="color:blue"&gt;foreach &lt;/span&gt;(&lt;span style="color:blue"&gt;int &lt;/span&gt;item &lt;span style="color:blue"&gt;in &lt;/span&gt;pilha){
                &lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.WriteLine(item);
            }
            &lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.WriteLine();

            &lt;span style="color:blue"&gt;int &lt;/span&gt;numero = pilha.Pop();
            &lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515"&gt;&amp;quot;Pop: &amp;quot; &lt;/span&gt;+ numero);
            
            numero = pilha.Pop();
            &lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515"&gt;&amp;quot;Pop: &amp;quot; &lt;/span&gt;+ numero);

            &lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.ReadLine();
        }
    }
}&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;&lt;font size=2&gt;        Como eu já comentei, os detalhes da geração das classes, bem como na execução num foreach, por exemplo, deixa tudo por conta do compilador e com o runtime. Você pode retornar um IEnumerator, implementando o GetEnumerator(); ou o IEnumerable, implementando um método qualquer. Como o compilador faz tudo, mantenha seu foco nas classes que você precisa retornar coleções e quais tipos estas devem retornar e  pronto. Além disso, fique atento para as regras de uso dos blocos de iterators e também para instrução yield. &lt;/font&gt;
&lt;p&gt;&lt;font size=2&gt;Abraço,&lt;/font&gt;
&lt;p&gt;&lt;strong&gt;&lt;font size=2&gt;Renato Guimarães, MS MVP Visual &lt;/font&gt; C#&lt;/strong&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2696233376832017329&amp;page=RSS%3a+%5bPAC.NET%5d%3a+Muito+mais+f%c3%a1cil+ter+uma+cole%c3%a7%c3%a3o+com+Iterators+-+O+compilador+faz+o+resto...&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=renatoguimaraes.spaces.live.com&amp;amp;GT1=renatoguimaraes"&gt;</description><category>Visual C#</category><comments>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1134.entry#comment</comments><guid isPermaLink="true">http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1134.entry</guid><pubDate>Wed, 04 Jun 2008 03:59:59 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://renatoguimaraes.spaces.live.com/blog/cns!256AF1F8919FD3B1!1134/comments/feed.rss</wfw:commentRss><wfw:comment>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1134.entry#comment</wfw:comment><dcterms:modified>2008-06-04T03:59:59Z</dcterms:modified></item><item><title>[PAC.NET]: Recuperando os HREFs de uma página HTML com Expressão Regular</title><link>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1119.entry</link><description>&lt;p&gt;  &lt;p&gt;&lt;font face=taho size=2&gt;Olá amigos, &lt;/font&gt; &lt;p&gt;&lt;font face=taho size=2&gt;          Neste exemplo vou explicar com mais detalhes uma expressão regular que pode ser usada para capturar os valores dos HREFs de uma página HTML. Queremos capturar o conteúdo do atributo HREF que, por exemplo, pode aparecer no formato: href=&amp;quot;&lt;/font&gt;&lt;a href="http://www.devgoias.net"&gt;&lt;font face=taho size=2&gt;http://www.devgoias.net&lt;/font&gt;&lt;/a&gt;&lt;font face=taho size=2&gt;&amp;quot;. A expressão deve capturar o valor &lt;/font&gt;&lt;a title="http://www.devgoias.net/" href="http://www.devgoias.net/"&gt;&lt;font face=taho size=2&gt;http://www.devgoias.net/&lt;/font&gt;&lt;/a&gt;&lt;font face=taho size=2&gt;. Abaixo segue a expressão que é um dos exemplos do Visual Studio .NET:&lt;/font&gt; &lt;p&gt;&lt;a href="http://bkcvpg.blu.livefilestore.com/y1pfPuLZj0vf-bhbky-pfW9yhP8qKMpDlnh3kVj8MCAnUjy0g3pdJb4yHvuUPTMxGdKTfefo6_dB8kATl7GnAVbLA?PARTNER=WRITER"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px" height=40 alt=image src="http://blu1.storage.msn.com/y1pp2uRHNESh0ppsEu5TSCeBY9148xX-xvU9sqJ0isl2_K1whJ0WycaVlmu614z7cwE39lyUJiEy3tJiReyYftuMF4tPFtCk1cp?PARTNER=WRITER" width=585 border=0&gt;&lt;/a&gt;  &lt;p&gt;&lt;font face=taho size=2&gt;          Antes de explicar cada detalhe da expressão, vamos entender os agrupadores, que permitem capturar sub-expressões de uma expressão. No caso da expressão acima temos três:&lt;/font&gt; &lt;ul&gt; &lt;li&gt;&lt;font size=2&gt;(?: e ) que está na cor azul, e diz que a substring não ser capturada pela sub-expressão, que está definido pelas duas partes separadas por |. A substring que não será capturada deve combinar com \&amp;quot;(?&amp;lt;1&amp;gt;[^\&amp;quot;]*)\&amp;quot; ou com (?&amp;lt;1&amp;gt;\\S+), logo abaixo mais explicações sobre este dois grupos.&lt;/font&gt; &lt;li&gt;&lt;font size=2&gt;(?&amp;lt;1&amp;gt; que estão em roxo e laranja que é um grupo numerado com o valor 1, ou seja, vamos acessá-lo pelo número. &lt;/font&gt;&lt;/ul&gt; &lt;p&gt;&lt;font face=taho size=2&gt;          Um detalhe. A \ é usada pra dizer que a aspa deve ser processada como o próprio caractere, a aspa. Onde tem \\ é para indicar que o C# não deve processar como um caractere de escape. Se fosse VB, por exemplo, não precisaria de \\, e no lugar do \&amp;quot; usaria um &amp;quot;&amp;quot;.&lt;/font&gt; &lt;p&gt;&lt;font face=taho size=2&gt;          Agora vamos entender a expressão que diz que a string para ser capturada deve: &lt;/font&gt; &lt;p&gt;&lt;font face=taho size=2&gt;• href\\s* -&amp;gt; começar por href e seguido, ou não, por um ou mais espaços em branco; e &lt;/font&gt; &lt;p&gt;&lt;font face=taho size=2&gt;• =\\s* -&amp;gt; um sinal de igual seguido, ou não, por um ou mais espaços em branco; e &lt;/font&gt; &lt;p&gt;&lt;font face=taho size=2&gt;• Uma substring que não será capturada pelo grupo (?:, mas um será capturada pelo grupo &amp;lt;1&amp;gt;. Aí queremos dizer que quando o valor do href vier entre aspas, a substring não será capturada. Só que o texto que estiver entre as aspas será capturado pelo grupo (?&amp;lt;1&amp;gt;.&lt;/font&gt; &lt;p&gt;&lt;font face=taho size=2&gt;          O código abaixo acessa uma página HTML e lista todos os valores dos HREFs. No código abaixo não estou levando em consideração aspectos de segurança e tratamento de erro, pois o foco está na execução da expressão. &lt;/font&gt;&lt;pre&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System;
&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Text.RegularExpressions;
&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Net;
&lt;span style="color:blue"&gt;using &lt;/span&gt;System.IO;

&lt;span style="color:blue"&gt;namespace &lt;/span&gt;PostsMSN.Samples.ListarUrls{
    &lt;span style="color:blue"&gt;class &lt;/span&gt;&lt;span style="color:#2b91af"&gt;Program&lt;/span&gt;{
        &lt;span style="color:blue"&gt;static void &lt;/span&gt;Main(&lt;span style="color:blue"&gt;string&lt;/span&gt;[] args){
            &lt;span style="color:green"&gt;// Cria a URL para o site 
            &lt;/span&gt;&lt;span style="color:#2b91af"&gt;WebRequest &lt;/span&gt;request = 
                &lt;span style="color:#2b91af"&gt;WebRequest&lt;/span&gt;.Create(&lt;span style="color:#a31515"&gt;&amp;quot;http://www.devgoias.net&amp;quot;&lt;/span&gt;);

            &lt;span style="color:green"&gt;// Obtém o response
            &lt;/span&gt;&lt;span style="color:#2b91af"&gt;HttpWebResponse &lt;/span&gt;response = 
                (&lt;span style="color:#2b91af"&gt;HttpWebResponse&lt;/span&gt;)request.GetResponse();

            &lt;span style="color:green"&gt;// Obtém o stream com a resposta do servidor.
            &lt;/span&gt;&lt;span style="color:#2b91af"&gt;Stream &lt;/span&gt;dataStream = response.GetResponseStream();

            &lt;span style="color:green"&gt;// Abre o stream para leitura
            &lt;/span&gt;&lt;span style="color:#2b91af"&gt;StreamReader &lt;/span&gt;reader = &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;StreamReader&lt;/span&gt;(dataStream);
            &lt;span style="color:blue"&gt;string &lt;/span&gt;strHtml = reader.ReadToEnd();

            ListarHrefs(strHtml);

            reader.Close();
            dataStream.Close();

            &lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.ReadLine();
        }

        &lt;span style="color:gray"&gt;/// &amp;lt;summary&amp;gt;
        /// &lt;/span&gt;&lt;span style="color:green"&gt;Lista todos os Hrefs do HTML
        &lt;/span&gt;&lt;span style="color:gray"&gt;/// &amp;lt;/summary&amp;gt;
        /// &amp;lt;param name=&amp;quot;strHtml&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;
        &lt;/span&gt;&lt;span style="color:blue"&gt;private static void &lt;/span&gt;ListarHrefs(&lt;span style="color:blue"&gt;string &lt;/span&gt;strHtml){
            &lt;span style="color:#2b91af"&gt;Regex &lt;/span&gt;regex = 
                &lt;span style="color:blue"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af"&gt;Regex&lt;/span&gt;(&lt;span style="color:#a31515"&gt;&amp;quot;href\\s*=\\s*(?:\&amp;quot;(?&amp;lt;1&amp;gt;[^\&amp;quot;]*)\&amp;quot;|(?&amp;lt;1&amp;gt;\\S+))&amp;quot;&lt;/span&gt;,
                &lt;span style="color:#2b91af"&gt;RegexOptions&lt;/span&gt;.IgnoreCase | &lt;span style="color:#2b91af"&gt;RegexOptions&lt;/span&gt;.Compiled);

            &lt;span style="color:blue"&gt;for &lt;/span&gt;(&lt;span style="color:#2b91af"&gt;Match &lt;/span&gt;m = regex.Match(strHtml); m.Success; m = m.NextMatch()){
                &lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515"&gt;&amp;quot;URL: &amp;quot; &lt;/span&gt;+ m.Groups[1]);
            }
        }
    }
}
&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;&lt;font size=2&gt;abraço,&lt;/font&gt;
&lt;p&gt;&lt;font size=2&gt;&lt;strong&gt;Renato Guimarães, MS MVP Visual C#&lt;/strong&gt;&lt;/font&gt;
&lt;p&gt;&lt;font face=taho size=2&gt;&lt;/font&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2696233376832017329&amp;page=RSS%3a+%5bPAC.NET%5d%3a+Recuperando+os+HREFs+de+uma+p%c3%a1gina+HTML+com+Express%c3%a3o+Regular&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=renatoguimaraes.spaces.live.com&amp;amp;GT1=renatoguimaraes"&gt;</description><category>Visual C#</category><comments>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1119.entry#comment</comments><guid isPermaLink="true">http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1119.entry</guid><pubDate>Sun, 01 Jun 2008 07:34:52 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://renatoguimaraes.spaces.live.com/blog/cns!256AF1F8919FD3B1!1119/comments/feed.rss</wfw:commentRss><wfw:comment>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1119.entry#comment</wfw:comment><dcterms:modified>2008-06-01T07:34:52Z</dcterms:modified></item><item><title>[PAC.NET]: Como saber quais dlls foram carregadas como executável?</title><link>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1116.entry</link><description>&lt;p&gt;&lt;font face=Tahoma size=2&gt;Olá amigos, &lt;/font&gt; &lt;p&gt;&lt;font face=Tahoma size=2&gt;     Um exemplo bem rápido de como saber quais as dlls foram carregads como executável. Perceba que estou considerando somente os assemblies carregados no AppDomain corrente. Deve existir outras formas de verificar esta informação... Acredito que uma delas está no código abaixo, onde verifico se o assembly tem um EntryPoint. Se tiver, quer dizer que é um executável. &lt;/font&gt;&lt;pre&gt;&lt;span style="color:blue"&gt;using &lt;/span&gt;System;
&lt;span style="color:blue"&gt;using &lt;/span&gt;System.Reflection;
&lt;span style="color:blue"&gt;using &lt;/span&gt;System.IO;

&lt;span style="color:blue"&gt;namespace &lt;/span&gt;PostsMSN.Samples.LoadedAssemblies{
    &lt;span style="color:blue"&gt;class &lt;/span&gt;&lt;span style="color:#2b91af"&gt;Program&lt;/span&gt;{
        &lt;span style="color:blue"&gt;static void &lt;/span&gt;Main(&lt;span style="color:blue"&gt;string&lt;/span&gt;[] args){
            &lt;span style="color:green"&gt;//obtém todos os módulos carregados no appdomain corrente
            &lt;/span&gt;&lt;span style="color:#2b91af"&gt;Assembly&lt;/span&gt;[] loadedAssemblies = &lt;span style="color:#2b91af"&gt;AppDomain&lt;/span&gt;.CurrentDomain.GetAssemblies();

            &lt;span style="color:blue"&gt;foreach &lt;/span&gt;(&lt;span style="color:#2b91af"&gt;Assembly &lt;/span&gt;assembly &lt;span style="color:blue"&gt;in &lt;/span&gt;loadedAssemblies){
                &lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.Write(&lt;span style="color:#a31515"&gt;&amp;quot;Assembly: &amp;quot; &lt;/span&gt;+ &lt;span style="color:#2b91af"&gt;Path&lt;/span&gt;.GetFileName(assembly.CodeBase));
                &lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515"&gt;&amp;quot;   É Executável? &amp;quot; &lt;/span&gt;+ 
                    ((assembly.EntryPoint != &lt;span style="color:blue"&gt;null&lt;/span&gt;) ? &lt;span style="color:#a31515"&gt;&amp;quot;Sim&amp;quot; &lt;/span&gt;: &lt;span style="color:#a31515"&gt;&amp;quot;Não&amp;quot;&lt;/span&gt;));
            }

            &lt;span style="color:#2b91af"&gt;Console&lt;/span&gt;.ReadLine();
        }
    }
}&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;&lt;font face=taho size=2&gt;Resultado:&lt;/font&gt;
&lt;p&gt;&lt;font face="Courier New" size=2&gt;Assembly: mscorlib.dll   É Executável? Não&lt;br&gt;Assembly: LoadedAssemblies.exe   É Executável? Sim&lt;/font&gt;
&lt;p&gt;&lt;font face=taho size=2&gt;     Por que este exemplo? Sei lá :-). Brincando. É porque vi no histórico de acesso do meu MSN Spaces que alguém estava procurando por esta informação. Como já fiz outro dia, então fiz este exemplo bem rapidinho. Fique a vontade para mandar outras sugestões...&lt;/font&gt;
&lt;p&gt;Abraço,
&lt;p&gt;&lt;strong&gt;Renato Guimarães, MS MVP Visual C#&lt;/strong&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=2696233376832017329&amp;page=RSS%3a+%5bPAC.NET%5d%3a+Como+saber+quais+dlls+foram+carregadas+como+execut%c3%a1vel%3f&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=renatoguimaraes.spaces.live.com&amp;amp;GT1=renatoguimaraes"&gt;</description><comments>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1116.entry#comment</comments><guid isPermaLink="true">http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1116.entry</guid><pubDate>Fri, 30 May 2008 22:02:33 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://renatoguimaraes.spaces.live.com/blog/cns!256AF1F8919FD3B1!1116/comments/feed.rss</wfw:commentRss><wfw:comment>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1116.entry#comment</wfw:comment><dcterms:modified>2008-05-30T22:02:33Z</dcterms:modified></item><item><title>[PAC.NET]: Exemplo de Expressão Regular para análise de log</title><link>http://renatoguimaraes.spaces.live.com/Blog/cns!256AF1F8919FD3B1!1115.entry</link><description>&lt;p&gt;&lt;font face=tah size=2&gt;Olá amigos, &lt;/font&gt; &lt;p&gt;&lt;font face=tah size=2&gt;       Com base no post que fiz outro dia sobre expressão regular - &lt;/font&gt;&lt;a href="http://renatoguimaraes.spaces.live.com/blog/cns!256AF1F8919FD3B1!1091.entry"&gt;&lt;font face=tah size=2&gt;[PAC.NET]: Expressões Regulares (Armamento Pesado)...&lt;/font&gt;&lt;/a&gt;&lt;font face=tah size=2&gt; -, gostaria de mostrar um exemplo de uma expressão que estou trabalhando para ler um determinado arquivo de log. &lt;/font&gt; &lt;p&gt;&lt;font size=2&gt;       Ainda estou no design des