<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://geeks.ms/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>El alegre bandolero...</title><link>http://geeks.ms/blogs/jmtorres/default.aspx</link><description>blog sobre experiencias en desarrollo .NET Framework en general y Windows Phone en particular</description><dc:language /><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>[Xamarin.iOS] Uso de DropBox Sync API con C#</title><link>http://geeks.ms/blogs/jmtorres/archive/2013/03/08/xamarin-ios-uso-de-dropbox-sync-api-con-c.aspx</link><pubDate>Fri, 08 Mar 2013 11:39:54 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:208814</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=208814</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2013/03/08/xamarin-ios-uso-de-dropbox-sync-api-con-c.aspx#comments</comments><description>&lt;p&gt;&lt;strong&gt;DropBox&lt;/strong&gt; ha &lt;a href="https://www.dropbox.com/developers/blog/26"&gt;hecho público&lt;/a&gt;, durante esta semana, la &lt;a href="https://www.dropbox.com/developers/sync"&gt;API para la sincronización del servicio de archivos en la “nube” para las plataformas iOS y Android&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;En el caso del &lt;strong&gt;SDK de iOS&lt;/strong&gt;, pese a que está íntegramente orientada a la plataforma iOS nativa, es posible integrarla en proyectos &lt;strong&gt;Xamarin.iOS &lt;/strong&gt;(desde &lt;strong&gt;Visual Studio &lt;/strong&gt;o &lt;strong&gt;Xamarin Studio&lt;/strong&gt;) a través de los &lt;em&gt;&lt;a href="http://docs.xamarin.com/guides/ios/advanced_topics/binding_objective-c_libraries"&gt;Binding Projects&lt;/a&gt;&lt;/em&gt;. Para los que no estan familiarizados con este tipo de proyectos, los &lt;em&gt;Binding Projects&lt;/em&gt; son un tipo específico de proyecto que permite en enlace de las librerias nativas tanto de Apple como de terceros, como es el caso de &lt;strong&gt;DropBox &lt;/strong&gt;o las impresoras &lt;strong&gt;Zebra&lt;/strong&gt;, para que puedan ser utilizadas desde código administrado.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_61137449.png"&gt;&lt;img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;display:inline;" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_2AE1D62D.png" width="644" height="305" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;En otras palabras, básicamente lo que hace es enlazar la definición de las interfaces, clases, delegados, métodos, propiedades, etc.. de la librería nativa en base a un archivo &lt;em&gt;header&lt;/em&gt; .h a su homólogo en C#:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;    @&lt;span class="kwrd"&gt;interface&lt;/span&gt; Widget : NSObject {
        @property (nonatomic, readwrite, assign) CGPoint center;
    }&lt;/pre&gt;


&lt;p&gt;por ejemplo a:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;[BaseType (&lt;span class="kwrd"&gt;typeof&lt;/span&gt; (NSObject))]
    &lt;span class="kwrd"&gt;interface&lt;/span&gt; Widget {
        [Export (&lt;span class="str"&gt;&amp;quot;center&amp;quot;&lt;/span&gt;)]
        PointF Center { get; set; }
    }&lt;/pre&gt;


&lt;p&gt;En definitiva, prácticamente todas las API de terceros (o almenos las mas importatens) tienen su correspondiente binding en Xaxmarin.iOS y la nueva DropBox Sync API no es menos. La podéis descargar desde &lt;a href="https://github.com/mono/monotouch-bindings/tree/master/DropBoxSync"&gt;aquí&lt;/a&gt;. Si clonáis el repositorio público &lt;a href="https://github.com/mono/monotouch-bindings"&gt;monotouch-bindings&lt;/a&gt; vereis, además, todas las librerias&amp;#160; enlazadas con Xamarin.iOS, con ejemplos y documentación.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Para poder ejecutar el ejemplo y/o hacer uso de la libreria DropBoxAPISync.iOS teneis dos opciones. O crear un proyecto Xamarin.iOS Binding Project y añadir los archivos de datos que encontrareis en la carpeta &lt;em&gt;binding&lt;/em&gt; del repositorio o bien ejecutar desde el Mac el siguiente comando:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;$ cd /&amp;lt;&amp;lt;MiPath&amp;gt;&amp;gt;/monotouch-bindings/DropBoxSync/binding &amp;amp;&amp;amp; make all&lt;/pre&gt;


&lt;p&gt;Esto generará la libreria &lt;strong&gt;DropBoxSync.iOS.dll&lt;/strong&gt; y lo único que tendreis q hacer es referenciarla desde el ejemplo cargado en el &lt;strong&gt;Visual Studio&lt;/strong&gt;. Ejecutar en el emulador o dispositivo físico y listos.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_395CD252.png"&gt;&lt;img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;display:inline;" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_12EAC93A.png" width="644" height="400" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=208814" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Visual+C_2300_/default.aspx">Visual C#</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Xamarin/default.aspx">Xamarin</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Xamarin.iOS/default.aspx">Xamarin.iOS</category></item><item><title>Anuncion oficial de Xamarin 2.0 ¡Ya está aquí!</title><link>http://geeks.ms/blogs/jmtorres/archive/2013/02/20/anuncion-oficial-de-xamarin-2-0-161-ya-est-225-aqu-237.aspx</link><pubDate>Wed, 20 Feb 2013 14:18:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:208617</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=208617</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2013/02/20/anuncion-oficial-de-xamarin-2-0-161-ya-est-225-aqu-237.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://blog.xamarin.com/"&gt;&lt;img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;float:none;margin-left:auto;border-left:0px;display:block;margin-right:auto;" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_7EFE5C6A.png" width="695" height="269" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Despu&amp;eacute;s de meses y meses de trabajo continuo hoy sale a la luz una de las obras de ingenieria mas excepcional y complejas de las que he tenido el placer de participar y que pretende ser un antes y un despu&amp;eacute;s para las apps multiplataforma de la mano de &lt;strong&gt;Xamar&amp;iacute;n&lt;/strong&gt;, una &amp;ndash;a&amp;uacute;n- empresa start-up con sede en Boston y San Francisco con&lt;strong&gt; una comunidad actual de m&amp;aacute;s de 230.000 desarrolladores&lt;/strong&gt; y un crecimiento del ultimo a&amp;ntilde;o de entorno al 300%.&lt;/p&gt;
&lt;p&gt;Xamarin es, hoy por hoy, la unica plataforma que est&amp;aacute; 100% enfocada a hacer de&lt;strong&gt; C# el lenguaje de desarrollo por escelencia&lt;/strong&gt; para la construcci&amp;oacute;n de apliaciones nativas en entornos no Microsoft como demuestran los m&amp;uacute;ltiples casos de &amp;eacute;xito de empresas y &lt;a href="http://xamarin.com/apps"&gt;aplicaciones del sector&lt;/a&gt;.&lt;/p&gt;
&lt;h1&gt;&amp;iquest;Qu&amp;eacute; es Xamarin 2.0?&lt;/h1&gt;
&lt;p&gt;Xamarin 2.0 es la nueva oleada de productos de la plataforma Xamarin para &lt;strong&gt;desarrollar aplicaciones multiplataforma con Visual C#&lt;/strong&gt; de los que cabe destacar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Nuevo IDE Xamarin Studio&lt;/strong&gt;. Se trata de un IDE 100% multiplataform centrada especialmente en la experiencia del usuario siendo a&amp;uacute;n m&amp;aacute;s intuitiva, con una interfaz de usuario extraordinaria y mucho m&amp;aacute;s!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/XamarinStudio_5F00_33FAC5CE.png"&gt;&lt;img title="Xamarin Studio" style="border-top:0px;border-right:0px;border-bottom:0px;float:none;margin-left:auto;border-left:0px;display:block;margin-right:auto;" border="0" alt="Xamarin Studio" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/XamarinStudio_5F00_thumb_5F00_4BA1D767.png" width="560" height="356" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;iexcl;&amp;iexcl;&lt;strong&gt;Soporte de Visual Studio para desarrollo de aplicaciones iOS&lt;/strong&gt;!!! Si, hab&amp;eacute;is le&amp;iacute;do bien. Xamarin ha lanzado el soporte oficial para el desarrollo de &lt;strong&gt;aplicaciones iOS desde Visual Studio 2010 y 2012&lt;/strong&gt;. Ahora los usuarios de &lt;strong&gt;Xamarin.iOS&lt;/strong&gt; podr&amp;aacute;n escribir c&amp;oacute;digo fuente desde Visual Studio y &lt;strong&gt;debugar y ejectura la aplicaci&amp;oacute;n desde el propio VS&lt;/strong&gt;, en el emulador o dispositivo f&amp;iacute;sico conectado al Mac donde est&amp;aacute; instalado Xamarin.iOS. Se trata de un producto que ha venido siendo solicitiado por los clientes y con esta primera versi&amp;oacute;n se ha conseguido enlazar el compilador de Xamarin.iOS instalado en un Mac con Visual Studio centrandose especialmente en la experiencia del desarrollador. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_1DA45EE2.png"&gt;&lt;img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;float:none;margin-left:auto;border-left:0px;display:block;margin-right:auto;" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_5FE75158.png" width="504" height="350" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Xamarin Component Store&lt;/strong&gt;. Se trata de una librer&amp;iacute;a de &lt;em&gt;pre-built components&lt;/em&gt; multiplataforma que est&amp;aacute; presente tanto para Visual Studio como Xamarin Studio y que pretende ser una &lt;strong&gt;&lt;em&gt;store&lt;/em&gt; de c&amp;oacute;digo para aplicaciones multiplataforma&lt;/strong&gt; con toda clase de componentes (gratuitos y de pago) tanto librerias como componentes gr&amp;aacute;ficos. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_67431105.png"&gt;&lt;img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;float:none;margin-left:auto;border-left:0px;display:block;margin-right:auto;" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_01DF8752.png" width="518" height="338" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Edici&amp;oacute;n Started Edition &amp;iexcl;totalmente grauita!&lt;/strong&gt; para &lt;a href="mailto:tod@s"&gt;tod@s&lt;/a&gt; aquellos que quieran conocer la potencia de la plataforma Xamarin, esta versi&amp;oacute;n te permitir&amp;aacute; desarrollar aplicaciones en cualquier plataforma con la &amp;uacute;nica limitaci&amp;oacute;n de que el tama&amp;ntilde;o m&amp;aacute;ximo de la aplicaci&amp;oacute;n es de 32k (en IL).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;&amp;iquest;Y ahora qu&amp;eacute;?&lt;/h1&gt;
&lt;p&gt;&amp;iexcl;&lt;a href="http://xamarin.com/tour"&gt;Pues a ahora a descargarselo y trastearlo&lt;/a&gt;! Aprovechate de las ventajas de la edici&amp;oacute;n Started Edition, prueba la versi&amp;oacute;n completa con la trial de 30 dias en cualquier momento y comprueba por t&amp;iacute; mismo la ventaja que tiene el conocer el tu lenguaje de programaci&amp;oacute;n favorito para adentrarte en plataformas como iOS con Xamarin.iOS o Android con Xamarin.Android. &amp;iquest;A&amp;uacute;n necesitas m&amp;aacute;s? Pues mira aqui:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blog.xamarin.com/"&gt;Anuncio oficial de Xamarin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://store.xamarin.com/"&gt;Licenciamiento&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://xamarin.com/xamarin-2.0-faq"&gt;Preguntas m&amp;aacute;s frecuentes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;M&amp;aacute;s a&amp;uacute;n:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Registrate al evento online que ofreceran &lt;strong&gt;Nat Friedman y Miguel de Icaza &lt;/strong&gt;el 5 de Marzo. M&amp;aacute;s info &lt;a href="http://resources.xamarin.com/IntrotoXamarin2.0forEMEA.html"&gt;aqui&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&amp;iquest;Quieres conocer a los &lt;em&gt;Xamurais&lt;/em&gt; en persona? Ven al &lt;a href="http://geeks.ms/blogs/jmtorres/archive/2013/01/20/evolve-2013-conferencia-internacional-de-desarrollo-m-243-vil.aspx"&gt;Evolve 2013&lt;/a&gt; que tendr&amp;aacute; lugar en Austin (TX) el 14-17 de Abril. Miguel de Icaza, Scott Hanselman, Nat Friedman y toda la plantilla de Xamarin estaremos por all&amp;iacute;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si a&amp;uacute;n necesitas m&amp;aacute;s info, no dudeis en contactarme. Prometo hablar largo y tendido sobre todo esto y m&amp;aacute;s!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Ready in the back!!!&lt;/em&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=208617" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Visual+C_2300_/default.aspx">Visual C#</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Xamarin/default.aspx">Xamarin</category></item><item><title>EVOLVE 2013, conferencia internacional de desarrollo móvil</title><link>http://geeks.ms/blogs/jmtorres/archive/2013/01/20/evolve-2013-conferencia-internacional-de-desarrollo-m-243-vil.aspx</link><pubDate>Sun, 20 Jan 2013 19:40:24 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:208342</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=208342</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2013/01/20/evolve-2013-conferencia-internacional-de-desarrollo-m-243-vil.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_543120D8.png"&gt;&lt;img title="image" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;display:inline;" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_18BD6F80.png" width="532" height="338" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Para los que queráis estar al día en cuanto a desarrollo de aplicaciones móviles con &lt;strong&gt;Visual C# &lt;/strong&gt;se refiere, el próximo mes de Abril tendrá lugar en Austin (Texas, EEUU) 4 días repletos de sesiones (2 de &lt;em&gt;Training&lt;/em&gt; y otras 2 más de conferencias) de la mano de los mayores expertos en los productos &lt;strong&gt;Xamarin&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Speakers de la talla de &lt;strong&gt;&lt;a href="http://tirania.org/blog/"&gt;Miguel de Icaza&lt;/a&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;a href="http://www.hanselman.com/"&gt;Scott Hanselman&lt;/a&gt;&lt;/strong&gt; o &lt;strong&gt;&lt;a href="http://en.wikipedia.org/wiki/Nat_Friedman"&gt;Nat Friedman&lt;/a&gt;&lt;/strong&gt; se daran cita durante los dias 14, 15, 16 y 17 en el lujoso &lt;strong&gt;Hotel Hilton Austin&lt;/strong&gt; del que será sin duda la conferencia anual de referencia para los desarrolladores de plataformas Android y iOS con la plaraforma &lt;strong&gt;Xamarin&lt;/strong&gt;. Diseño de aplicaciones móviles, experiencia de usuario, movilidad en el mundo empresarial, App marketing y monetización o incluso las mejores prácticas para soluciones &lt;em&gt;Cross-Platform &lt;/em&gt;son sólo un ejemplo de&amp;#160; la temática que se tocará en &lt;strong&gt;Evolve 2013&lt;/strong&gt;. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Tanto si estás interesado en adentrarte en el mundo de desarrollo de aplicaciones móviles con Visual C# para otras plataformas como Android o iOS o simplemente ya tienes experiencia y quieres aprender y estar al día de la mano de los mayores expertos, esta es tu gran oportunidad. Podéis registraros únicamente a la formación o a la conferencia o a ambas. Ah! y los 100 primeros inscritos tendran un descuento del 20%. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;¡Nos vemos en Austin!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Más info | &lt;a href="http://xamarin.com/evolve#home"&gt;Evolve 2013&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=208342" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Comunidad/default.aspx">Comunidad</category></item><item><title>Nuevo curso de Mono for Android</title><link>http://geeks.ms/blogs/jmtorres/archive/2012/10/16/nuevo-curso-de-mono-for-android.aspx</link><pubDate>Tue, 16 Oct 2012 09:02:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:207138</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=207138</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2012/10/16/nuevo-curso-de-mono-for-android.aspx#comments</comments><description>&lt;p&gt;&lt;img src="http://www.elandroidelibre.com/wp-content/uploads/2012/06/Mono-for-Android-Create-apps-for-Android-devices-using-C-and-.NET_.png" style="margin:5px 5px 5px 0px;" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Hace ya poco m&amp;aacute;s de dos meses que me incorpor&amp;eacute; en &lt;a href="http://www.xamarin.com"&gt;Xamarin, Inc&lt;/a&gt;. y me ha sorprendido gratamente la gran acogida que ha tenido y est&amp;aacute; teniendo, especialmente en USA, dos de los productos estrellas de &lt;a href="http://en.wikipedia.org/wiki/Mono_(software)"&gt;MONO&lt;/a&gt;, &lt;a href="http://xamarin.com/monoforandroid"&gt;Mono for Android&lt;/a&gt; y &lt;a href="http://xamarin.com/monotouch"&gt;MonoTouch&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Por experiencia propia la habilidad de conocer &lt;strong&gt;Visual C#&lt;/strong&gt; es una gran ventaja a la hora de adentrarse a desarrollar para otras plataformas, en las que adem&amp;aacute;s de tener que lidiar con la idiosincrasia de la propia plataforma tienes que hacer lo propio con el entorno de desarrollo y m&amp;aacute;s importante con el lenguaje de programaci&amp;oacute;n. Y es que aunque no soy un gran conocedor de &lt;em&gt;java&lt;/em&gt; u &lt;em&gt;objective-c&lt;/em&gt; la potencia que tiene Visual C# respecto a sus competidores es, en mi honesta opini&amp;oacute;n, importante.&lt;/p&gt;
&lt;p&gt;Para todos aquellos que ahora teng&amp;aacute;is la oportunidad o necesidad de adentrarse en el &lt;strong&gt;desarrollo de dispositivos Android con Visual C#,&lt;/strong&gt; adem&amp;aacute;s de la aclamada &lt;a href="http://docs.xamarin.com/"&gt;librer&amp;iacute;a de documentaci&amp;oacute;n&lt;/a&gt; que mantenemos en Xamar&amp;iacute;n, los amigos de &lt;strong&gt;&lt;a href="http://www.campusmvp.com/"&gt;CampusMVP&lt;/a&gt;&lt;/strong&gt; han lanzado un curso que nada tiene que envidiarla con la ventaja de que adem&amp;aacute;s est&amp;aacute; en espa&amp;ntilde;ol.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.campusmvp.com/catalogo/Product-Desarrollo-de-aplicaciones-m%C3%B3viles-para-Android-con-.NET_160.aspx"&gt;Se trata de un curso&lt;/a&gt; de divididos en 10 m&amp;oacute;dulos que tratan el ciclo de vida de desarrollo de aplicaciones &lt;strong&gt;Mono for Android&lt;/strong&gt;, desde los cimientos de MONO y su adaptaci&amp;oacute;n a &lt;em&gt;Android&lt;/em&gt; hasta el despliegue de aplicaciones en el Marketplace pasando por todas la caracter&amp;iacute;sticas de la plataforma, Actividades, Notificaciones, Men&amp;uacute;s, controles est&amp;aacute;ndares y customizados&amp;hellip; vamos un curso que no os pod&amp;eacute;is perder escrito por un excelente profesional como lo es &lt;strong&gt;Rub&amp;eacute;n Rubio&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Ahora si, ya tenemos material did&amp;aacute;ctico en espa&amp;ntilde;ol y adem&amp;aacute;s de la mano de CampusMVP.&lt;/p&gt;
&lt;p&gt;M&amp;aacute;s info | &lt;a href="http://www.campusmvp.com/catalogo/Product-Desarrollo-de-aplicaciones-m%C3%B3viles-para-Android-con-.NET_160.aspx"&gt;Sitio oficial del curso&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=207138" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Comunidad/default.aspx">Comunidad</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Visual+C_2300_/default.aspx">Visual C#</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Android/default.aspx">Android</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/.NET+Framework/default.aspx">.NET Framework</category></item><item><title>Bye, bye… MVP</title><link>http://geeks.ms/blogs/jmtorres/archive/2012/03/26/bye-bye-mvp.aspx</link><pubDate>Mon, 26 Mar 2012 17:55:40 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:204031</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>12</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=204031</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2012/03/26/bye-bye-mvp.aspx#comments</comments><description>&lt;p&gt;Como todo en esta vida, todo lo que empieza … acaba y ha llegado mi hora en el programa MVP. Probablemente el 2011 ha sido uno de los años más dificiles de mi vida y las comunidades han pasado a estar en un segundo plano, de hecho aún siguen estandolo pues tampoco las estoy disfrutando como hace 5 años, cuando empecé en el programa MVP.&lt;/p&gt;  &lt;h1&gt;Que me llevo…&lt;/h1&gt;  &lt;p&gt;Si tuviera que quedarme con algo del programa más allá “del titulo” y los viajes, sin dudarlo ni un solo segundo me quedo con toda la gente que he conocido y que espero poder mantener siempre y con los que he compartido programa desde el 2008, empezando por &lt;strong&gt;Alejandro Mezcua &lt;/strong&gt;con el que compartí viaje a Seattle en mi primer MVP Summit en el 2008 y con el que tengo el privilegio de poder coger el teléfono y llamarlo que siempre está ahí. A &lt;strong&gt;Marino Posadas &lt;/strong&gt;por las oportuniades que me ofreció en un momento muy delicado de mi vida. A &lt;strong&gt;Pep Lluis Baño&lt;/strong&gt;, el padre de las comundiades y el “Papá” de muchos de nosotros –no lo digo por la edad, lo digo por la experiencia. A &lt;strong&gt;Hadi Hariri&lt;/strong&gt;, el Che Guevara de la comunidad. Joder, ¡¡cuanto he aprendido de ti chaval!!! A mi muy mejor amigo, &lt;strong&gt;Roberto González&lt;/strong&gt;, por las cervezas, la compañía y las risas, jamás olvidaré esas noches de Seattle. A &lt;strong&gt;Luis Fraile&lt;/strong&gt;, porque siempre he acabado haciendo lo que él decía, y he de reconocer que siempre ha acertado. Al titán, &lt;strong&gt;Rodrigo Corral&lt;/strong&gt;, por que pese a que haga regimen siempre será grande. A &lt;strong&gt;Unai Zorrila&lt;/strong&gt;, por que es un cabrón y por que no hay ningúno como él, especialmente en lo profesional (de lo mejor sin duda). A &lt;strong&gt;Jorge Serrrano&lt;/strong&gt;, creo que si alguien define el programa es él. A &lt;strong&gt;Lluis Franco&lt;/strong&gt; del Hospitalete, mi otro yo, y el sabe porque lo digo (Cuanto te quiero chaval). A &lt;strong&gt;José Manuel Alarcón&lt;/strong&gt;, como dice su paisano El Pazos, el so machi bum man, un currante como la copa del pino y el único que se atrevió a editarme el libro; gracias tio. A &lt;strong&gt;Juan Carlos González&lt;/strong&gt;, uno de los MOSS men; tengo pendiente un viaje Cantabria, no lo olvides. A “El Ché &lt;strong&gt;El Bruno Capuano&lt;/strong&gt;”, contigo aprendí q los argentinos sos grandes, tu el que más. A &lt;strong&gt;Marco Amoedo&lt;/strong&gt;, mi compañero de habitación en mis últimos viajes con el he compartido más que habitación; no, no me refiero a eso, no seais mal pensados. A &lt;strong&gt;José Luis Latorre&lt;/strong&gt;, con el que además de compartír patrón de nombre, comparto una buena amistad. Gracias por todo chaval y perdona si no he estado a la altura. A &lt;strong&gt;Toni Recio&lt;/strong&gt;, al que le llamo con todo mi cariño y aprecio “El Follonero” y porque hace más de 3 años que le debo una comida (snif!!!!!) y pq ha sabido ver otra forma de ver las comunidades. A &lt;strong&gt;Marc Rubiño&lt;/strong&gt;, al que veo a diario, por no darme más por saco con el Barça. Ah si, y por que si tengo dudas de ASP.NET, la daré la chapa a él. A &lt;strong&gt;Octavio Hernández&lt;/strong&gt;, el único hombre que además del dominar el españo y el inglés, domina C#. A &lt;strong&gt;Julián Peris&lt;/strong&gt;, porque es unico. De verdad, no hay nadie igual a él. Fue en su momento el alma matter de los MVP Summit. A &lt;strong&gt;Eduardo Ortega&lt;/strong&gt;, el friki por excelencia. A &lt;strong&gt;David Nudelman&lt;/strong&gt;, porque es unico en su especie porque, como su propio apellido indica, es español 100% .A los SolidQ boys: &lt;strong&gt;Eladio Rincón, Miguel de Egea, Salvador Ramos&lt;/strong&gt;… la crem de la crem. A los chicos de Plain, desde &lt;strong&gt;Ibón Landa&lt;/strong&gt;, “el Joseba” hasta &lt;strong&gt;Iván González&lt;/strong&gt;. Gracias por cogerme el teléfono cuando he estado con problemas. Os debo una. A &lt;strong&gt;Juansa Llopis&lt;/strong&gt;, &lt;strong&gt;“Palel” Pilar&lt;/strong&gt;, &lt;strong&gt;Iñaki Ayúcar&lt;/strong&gt; pq aun en la distancia nos mantenmos cercanos. Y como no, a la jefa, a &lt;strong&gt;Cristina González&lt;/strong&gt;, por todo.&lt;/p&gt;  &lt;p&gt;Ostia, me emocioné y no he podido evitar nombrar a &lt;a href="mailto:tod@s"&gt;tod@s&lt;/a&gt; los que me han venido a la cabeza y seguro que me olvido a alguien. Si es así no me lo tengais en cuenta; además nos volveremos a ver por ahí, un sarao sin El Alegre Bandolero, no es un sarao. :-)&lt;/p&gt;  &lt;p&gt;Cuando nos volvamos a ver, que sea en los bares…&lt;/p&gt;  &lt;p&gt;josemiguel&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=204031" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Comunidad/default.aspx">Comunidad</category></item><item><title>[ESTUDIOS] Los low-end Smartphones acapararán el mercado de telefonia móvil en el 2015</title><link>http://geeks.ms/blogs/jmtorres/archive/2011/08/29/estudios-los-low-end-smartphones-acaparar-225-n-el-mercado-de-telefonia-m-243-vil-en-el-2015.aspx</link><pubDate>Mon, 29 Aug 2011 13:30:08 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:200257</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=200257</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2011/08/29/estudios-los-low-end-smartphones-acaparar-225-n-el-mercado-de-telefonia-m-243-vil-en-el-2015.aspx#comments</comments><description>&lt;p&gt;&lt;img border="1" hspace="4" alt="Psst: The latest mobile tech rumors could bring new offerings from Apple, Google, and more." vspace="4" src="http://www.blogcdn.com/smallbusiness.aol.com/media/2010/05/mobile-tech-rumors-430jve052010-1274412704.jpg" /&gt;&lt;/p&gt;  &lt;p&gt;Según un reciente estudio llevado a cabo por &lt;strong&gt;IHS iSuppli Mobile Handset Market Tracker &lt;/strong&gt;el mercado de los smartphones pueden llegar a acaparar el mercado del e-commerce a nivel mundial en el año 2015.&lt;/p&gt;  &lt;p&gt;Las previsiones estiman que más de &lt;strong&gt;1.000 millones de unidades&lt;/strong&gt; serán vendidas durante el año &lt;strong&gt;2015&lt;/strong&gt;, doblando los actuales &lt;strong&gt;478 millones&lt;/strong&gt; de este año 2011. El incremento se situa, por lo tanto, en un &lt;strong&gt;54.4%&lt;/strong&gt; muy por encima del&lt;strong&gt; 32.5%&lt;/strong&gt; de este mismo año.&lt;/p&gt;  &lt;p&gt;Esta subida será principalmente promovida por la aparición de los &lt;strong&gt;Low Cost Smartphones&lt;/strong&gt;, términales móviles de características limitadas en términos de capacidad y memoria en relación a los Smartphones de altas prestaciones. Dentro de este mismo estudio se prevee que el crecimiento porcentual de la gama Low Cost se sitúe por encima del &lt;strong&gt;115%&lt;/strong&gt; mientras que la tasa de crecimiento de los Smartphones de media y alta gama permanecerán en un &lt;strong&gt;16.4%&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;La bajada de precio para el consumidor así como la irrupción de las denomiadas economías emergentes de paises como &lt;strong&gt;China, India, la zona del sur este asiático así como Africa&lt;/strong&gt; catapultaran este tipo de terminales móviles.&lt;/p&gt;  &lt;p&gt;Un ejemplo claro de lo que se puede esperar lo materializa la empresa &lt;strong&gt;Samsung&lt;/strong&gt; gracias a la aparición de terminales de bajo coste en mercados como el de China o Latino América con un incremento en ventas muy superior al de resto de competidores.&lt;/p&gt;  &lt;p&gt;Por su parte, y con la anunciada bajada de requisitos de hardware anunciada en el MIX del 2011, &lt;strong&gt;Windows Phone 7.1 “Mango”&lt;/strong&gt; pretende ser la lanzadera perfecta para otro monstruo de la telefonía móvil como es la compañía finlandesa &lt;strong&gt;Nokia&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Se abre, por tanto, un periodo en el que una nuevo concepción de Smartphone pretende tomar las riendas del apetitoso mercado de Internet en téminos de ventas, telefonía y como no, e-commerce.&lt;/p&gt;  &lt;p&gt;Más info | &lt;a href="http://www.isuppli.com/Mobile-and-Wireless-Communications/News/Pages/Smartphones-to-Account-for-Majority-of-Cellphone-Shipments-by-2015.aspx" target="_blank"&gt;Smartphones to Account for Majority of Cellphone Shipments by 2015&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=200257" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Noticias/default.aspx">Noticias</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Windows+Phone+7+Series/default.aspx">Windows Phone 7 Series</category></item><item><title>REACTIVE-ando información de la DGT en Windows Phone 7 (y II)</title><link>http://geeks.ms/blogs/jmtorres/archive/2011/04/12/reactive-ando-informaci-243-n-de-la-dgt-en-windows-phone-7-y-ii.aspx</link><pubDate>Tue, 12 Apr 2011 07:17:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:192200</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=192200</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2011/04/12/reactive-ando-informaci-243-n-de-la-dgt-en-windows-phone-7-y-ii.aspx#comments</comments><description>&lt;p align="center"&gt;
&lt;table width="400" cellpadding="2" cellspacing="0" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="133" valign="top"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/Main_5F00_19C0AD27.png"&gt;&lt;img height="244" width="148" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/Main_5F00_thumb_5F00_4DC526AD.png" alt="Main" border="0" title="Main" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td width="133" valign="top"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/filtros_5F00_052B37DC.png"&gt;&lt;img height="244" width="148" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/filtros_5F00_thumb_5F00_087CA9B7.png" alt="filtros" border="0" title="filtros" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td width="133" valign="top"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/detalles_5F00_3FE2BAE5.png"&gt;&lt;img height="244" width="148" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/detalles_5F00_thumb_5F00_3CED5632.png" alt="detalles" border="0" title="detalles" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Lo prometido es deuda y ya est&amp;aacute; publicada la aplicaci&amp;oacute;n &amp;ndash;bastante simple- de ejemplo en el Marketplace de Windows Phone 7, despu&amp;eacute;s de sortejar alg&amp;uacute;n contratiempo en el proceso de validaci&amp;oacute;n, especialmente con la gesti&amp;oacute;n del estado de la aplicaci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;Decir que la aplicaci&amp;oacute;n se llama &lt;strong&gt;ViV Trafico &lt;/strong&gt;(Visor Incidencia Viarias), y en esta primera versi&amp;oacute;n proporciona una opci&amp;oacute;n de filtrado por Autonomia, Carretera y Poblaci&amp;oacute;n. Evidentemente se le puede sacar mucho m&amp;aacute;s provecho pero mientras, el tiempo que tengo para dedicar no me da para m&amp;aacute;s.&lt;/p&gt;
&lt;p&gt;La aplicaci&amp;oacute;n la pod&amp;eacute;is descargar haciendo click en el siguiente logo.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://social.zune.net/redirect?type=phoneApp&amp;amp;id=7d6e1c7b-6351-e011-854c-00237de2db9e"&gt;&lt;img height="204" width="204" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/icon_5F00_200_5F00_6929DD16.png" alt="icon_200" border="0" title="icon_200" style="background-image:none;border-bottom:0px;border-left:0px;margin:5px auto;padding-left:0px;padding-right:0px;display:block;float:none;border-top:0px;border-right:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Por otro lado, tambi&amp;eacute;n he compartido el c&amp;oacute;digo completo de la aplicaci&amp;oacute;n que est&amp;aacute; en el Marketplace, para vuestro inter&amp;eacute;s. Est&amp;aacute; hospedado en &lt;a href="http://vivtrafico.codeplex.com"&gt;http://vivtrafico.codeplex.com&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Un saludo,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=192200" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/CodePlex/default.aspx">CodePlex</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Windows+Phone+7+Series/default.aspx">Windows Phone 7 Series</category></item><item><title>REACTIVE-ando información de la DGT en Windows Phone 7</title><link>http://geeks.ms/blogs/jmtorres/archive/2011/03/21/reactive-ando-informaci-243-n-de-la-dgt-en-windows-phone-7.aspx</link><pubDate>Mon, 21 Mar 2011 11:30:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:190792</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=190792</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2011/03/21/reactive-ando-informaci-243-n-de-la-dgt-en-windows-phone-7.aspx#comments</comments><description>&lt;p&gt;Desde hace alg&amp;uacute;n tiempo he estado mirando y estudiando las posibilidades de las &lt;strong&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/devlabs/ee794896"&gt;Reactive Extensions -Rx-,&lt;/a&gt;&lt;/strong&gt; las cuales se encuentran actualmente en los Labs de Microsoft. Con la aparicici&amp;oacute;n de Windows Phone 7, tenemos a nuestra disposici&amp;oacute;n parte de estas extensiones dentro de los ensamblados&lt;strong&gt; Microsoft.Phone.Reactive&lt;/strong&gt; y &lt;strong&gt;System.Observable&lt;/strong&gt;. De hecho existe una versi&amp;oacute;n espec&amp;iacute;fica de Rx para WIndows Phone 7 adem&amp;aacute;s de las que vienen instaladas en la ROM por defecto pero cuya instalaci&amp;oacute;n no est&amp;aacute; incluida en la ROM.&lt;/p&gt;
&lt;p&gt;El caso es que durante el fin de semana se me ocurri&amp;oacute; la idea de obtener la informaci&amp;oacute;n que la &lt;strong&gt;Direcci&amp;oacute;n General de Tr&amp;aacute;fico&lt;/strong&gt; expone a trav&amp;eacute;s de un feed en XML de forma que pueda ser consultada por una aplicaci&amp;oacute;n WP7. Recordaba algunos ejemplos, b&amp;aacute;sicamente orientados a la API de Twitter, en los que mostraba toda la potencia de la Rx en operaciones asincronas y manejo de eventos. &lt;/p&gt;
&lt;p&gt;Lo que inicialmente se convirti&amp;oacute; en un ejercicio de refresco y puesta en pr&amp;aacute;ctica de las Rx finalmente se ha convertido en una aplicaci&amp;oacute;n que &lt;strong&gt;publicar&amp;eacute; en el marketplace de WP7 en breve&lt;/strong&gt;. Adem&amp;aacute;s, &lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;compartir&amp;eacute; el c&amp;oacute;digo &amp;iacute;ntegro de dicha aplicaci&amp;oacute;n en codeplex&lt;/span&gt;&lt;/strong&gt;. Anunciar&amp;eacute; tales novedades en este mismo blog.&lt;/p&gt;
&lt;h1&gt;Informaci&amp;oacute;n de la DGT&lt;/h1&gt;
&lt;p&gt;Antes de entrar en profundidad vamos a ver que es lo ofrece la API de la DGT. La url es : &lt;a href="http://dgt.es/incidencias.xml" title="http://dgt.es/incidencias.xml"&gt;http://dgt.es/incidencias.xml&lt;/a&gt; y el resultado:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_4B0FC1C8.png"&gt;&lt;img height="576" width="601" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_189BC87C.png" alt="image" border="0" title="image" style="background-image:none;border-right-width:0px;margin:5px 5px 5px 0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Es decir que un elemento o incidencia tiene el siguiente formato XML:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;incidencia&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;tipo&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;METEOROLOGICA&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;tipo&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;autonomia&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;ANDALUCIA&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;autonomia&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;provincia&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;JAEN&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;provincia&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;matricula&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;J&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;matricula&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;causa&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;LLUVIA&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;causa&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;poblacion&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;SANTA ELENA&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;poblacion&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;fechahora_ini&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;2011-03-12 19:48&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;fechahora_ini&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;nivel&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;VERDE&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;nivel&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;carretera&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;A-4&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;carretera&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;pk_inicial&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;245.0&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;pk_inicial&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;pk_final&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;288.0&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;pk_final&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;sentido&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;Ambos sentidos&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;sentido&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;hacia&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;Ambos&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;hacia&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;incidencia&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Y la representaci&amp;oacute;n en C# es b&amp;aacute;sicamente&amp;hellip;.&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Incidencia &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; Incidencia()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;     { }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Tipo { get; set; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Autonomia { get; set; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Matricula { get; set; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Causa { get; set; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Poblacion { get; set; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; FechaHora { get; set; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Nivel { get; set; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Carretera { get; set; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Incial { get; set; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Final { get; set; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  17:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Sentido { get; set; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  18:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Hacia { get; set; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  19:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;En realidad, en el proyecto final aparecen un par de campos m&amp;aacute;s utilizados para notificar informaciones a la pantalla, hablaremos de ello m&amp;aacute;s adelante.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;REACTIVEando la soluci&amp;oacute;n&lt;/h1&gt;
&lt;p&gt;Decid&amp;iacute; utilizar las &lt;strong&gt;Rx &lt;/strong&gt;para, por un lado englobar la operaci&amp;oacute;n &lt;strong&gt;WebRequest &lt;/strong&gt;y posterior deserializaci&amp;oacute;n del XML en una colecci&amp;oacute;n &lt;strong&gt;IObservable &lt;/strong&gt;y por otro lado utilizar las extensiones de Rx para que de forma reactiva consulte la informaci&amp;oacute;n expuesta en el API de la DGT cada 3 minutos y notifique los cambios a un subscritor que no es m&amp;aacute;s que una colecci&amp;oacute;n &lt;strong&gt;ObservableCollection&lt;/strong&gt; enlazada a una aplicaci&amp;oacute;n Windows Phone 7.&lt;/p&gt;
&lt;p&gt;Vayamos por partes. Un esquema aproximado seria el siguiente:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/Esquema_5F00_5C5FD706.png"&gt;&lt;img height="462" width="703" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/Esquema_5F00_thumb_5F00_7EF3EFB4.png" alt="Esquema" border="0" title="Esquema" style="background-image:none;border-right-width:0px;margin:5px 5px 5px 0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;En primer lugar creamos la petici&amp;oacute;n a la direcci&amp;oacute;n URL donde se aloja el XML indicandole el m&amp;eacute;todo y el contenido.&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; var webRequest = &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;     WebRequest.Create(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Uri(&lt;span style="color:#006080;"&gt;&amp;quot;http://dgt.es/incidencias.xml&amp;quot;&lt;/span&gt;));&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt; webRequest.Method = &lt;span style="color:#006080;"&gt;&amp;quot;POST&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt; webRequest.ContentType = &lt;span style="color:#006080;"&gt;&amp;quot;text/XML&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;A continuaci&amp;oacute;n realizamos la llamada as&amp;iacute;ncrona mediante &lt;strong&gt;BeginGetResponse&lt;/strong&gt; y &lt;strong&gt;EndGetResponse&lt;/strong&gt; y es aqui d&amp;oacute;nde entra en escena las Rx. Utilizando el m&amp;eacute;todo &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/microsoft.phone.reactive.observable.fromasyncpattern(v=vs.92).aspx"&gt;Observable.FromAsynPattern&amp;lt;T&amp;gt;&lt;/a&gt; podemos convertir la funci&amp;oacute;n Begin/End a una funci&amp;oacute;n as&amp;iacute;ncrona de la siguiente forma:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; var peticion = Observable.FromAsyncPattern&amp;lt;WebResponse&amp;gt;(&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;                     webRequest.BeginGetResponse,&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;                     webRequest.EndGetResponse);&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;De esta forma obtenemos un delegado del tipo &lt;strong&gt;&lt;em&gt;System.Func&amp;lt;System.IObservable&amp;lt;System.Net.WebResponse&amp;gt;&amp;gt;&lt;/em&gt;&lt;/strong&gt; representado por la variable impl&amp;iacute;cita &lt;strong&gt;peticion, &lt;/strong&gt;vamos, una funci&amp;oacute;n de salida con un iterador del tipo &lt;strong&gt;IObservable&lt;/strong&gt;. Ahora es el turno de LINQ &amp;ndash;de ah&amp;iacute; q en ocasiones se conozcan las Rx como LINQ to Events. Lo q vamos a hacer es seleccionar la respuesta Web y retornarla en forma de &lt;strong&gt;IEnumerable&amp;lt;Incidencias&amp;gt;.&lt;/strong&gt; La sentencia LINQ tendria el siguiente aspecto:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; IEnumerable&amp;lt;Incidencia&amp;gt; res = from elemento &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; peticion()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;     .Select(respuestaWeb =&amp;gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (var rs = respuestaWeb.GetResponseStream())&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;         {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; rs.Deserialize(respuestaWeb.ContentLength);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;         }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;     })&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;     select elemento;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;La responsabilidad de transformar el &lt;strong&gt;Stream&lt;/strong&gt; que contiene todo el XML en un &lt;strong&gt;IEnumerable&amp;lt;Incidencias&amp;gt;&lt;/strong&gt; recae sobre el m&amp;eacute;todo extensor &amp;ndash;de Stream- Deserialize. B&amp;aacute;sicamente lo que hace es obtener del stream todo el XML y mediante &lt;strong&gt;LINQ to XML&lt;/strong&gt; &amp;ldquo;deserializarlo&amp;rdquo; &amp;ndash;no es exactamente una deserializaci&amp;oacute;n- en una lista generica del tipo&amp;nbsp; Incidendica tal y como se muestra a continuaci&amp;oacute;n:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; IEnumerable&amp;lt;Incidencia&amp;gt; Deserialize(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt; Stream objeto, &lt;span style="color:#0000ff;"&gt;long&lt;/span&gt; lenght)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     var readBuffer = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;byte&lt;/span&gt;[lenght];&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;     IEnumerable&amp;lt;Incidencia&amp;gt; nuevasIncidencias = &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;     objeto.BeginRead(readBuffer, 0, readBuffer.Length, &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;                         readAr =&amp;gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;                             {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;                                 var read = objeto.EndRead(readAr);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;                                 var readText = Encoding.UTF8&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;                                     .GetString(readBuffer, 0, readBuffer.Length);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;                                 nuevasIncidencias = from elemento &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; XDocument.Parse(readText)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;                                                         .Descendants(&lt;span style="color:#006080;"&gt;&amp;quot;raiz&amp;quot;&lt;/span&gt;).Descendants(&lt;span style="color:#006080;"&gt;&amp;quot;incidencia&amp;quot;&lt;/span&gt;)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt;                                                     select &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Incidencia &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  17:&lt;/span&gt;                                                             {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  18:&lt;/span&gt;                                                                 Autonomia = elemento.Element(XName.Get(&lt;span style="color:#006080;"&gt;&amp;quot;autonomia&amp;quot;&lt;/span&gt;)).Value,&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  19:&lt;/span&gt;                                                                 Carretera =&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  20:&lt;/span&gt;                                                                     elemento.Element(XName.Get(&lt;span style="color:#006080;"&gt;&amp;quot;carretera&amp;quot;&lt;/span&gt;)).Value,&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  21:&lt;/span&gt;                                                                 Causa = elemento.Element(XName.Get(&lt;span style="color:#006080;"&gt;&amp;quot;causa&amp;quot;&lt;/span&gt;)).Value,&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  22:&lt;/span&gt;                                                                 FechaHora =&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  23:&lt;/span&gt;                                                                     elemento.Element(XName.Get(&lt;span style="color:#006080;"&gt;&amp;quot;fechahora_ini&amp;quot;&lt;/span&gt;)).Value,&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  24:&lt;/span&gt;                                                                 Final = elemento.Element(XName.Get(&lt;span style="color:#006080;"&gt;&amp;quot;pk_final&amp;quot;&lt;/span&gt;)).Value,&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  25:&lt;/span&gt;                                                                 Hacia = elemento.Element(XName.Get(&lt;span style="color:#006080;"&gt;&amp;quot;hacia&amp;quot;&lt;/span&gt;)).Value,&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  26:&lt;/span&gt;                                                                 Incial = elemento.Element(XName.Get(&lt;span style="color:#006080;"&gt;&amp;quot;pk_inicial&amp;quot;&lt;/span&gt;)).Value,&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  27:&lt;/span&gt;                                                                 Matricula =&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  28:&lt;/span&gt;                                                                     elemento.Element(XName.Get(&lt;span style="color:#006080;"&gt;&amp;quot;matricula&amp;quot;&lt;/span&gt;)).Value,&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  29:&lt;/span&gt;                                                                 Nivel = elemento.Element(XName.Get(&lt;span style="color:#006080;"&gt;&amp;quot;nivel&amp;quot;&lt;/span&gt;)).Value,&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  30:&lt;/span&gt;                                                                 Poblacion =&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  31:&lt;/span&gt;                                                                     elemento.Element(XName.Get(&lt;span style="color:#006080;"&gt;&amp;quot;poblacion&amp;quot;&lt;/span&gt;)).Value,&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  32:&lt;/span&gt;                                                                 Sentido = elemento.Element(XName.Get(&lt;span style="color:#006080;"&gt;&amp;quot;sentido&amp;quot;&lt;/span&gt;)).Value,&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  33:&lt;/span&gt;                                                                 Tipo = elemento.Element(XName.Get(&lt;span style="color:#006080;"&gt;&amp;quot;tipo&amp;quot;&lt;/span&gt;)).Value&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  34:&lt;/span&gt;                                                             };&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  35:&lt;/span&gt;                             }, &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  36:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  37:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; nuevasIncidencias;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  38:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Hasta aqu&amp;iacute; tenemos los puntos 1 y 2 del esquema resuelto. Todo esto deber&amp;iacute;amos encapsularlo en un m&amp;eacute;todo de forma que podamos, posteriormente aplicarle alg&amp;uacute;n tipo de comportamiento como por ejemplo exponerlo como &lt;strong&gt;&lt;em&gt;Observable&lt;/em&gt;&lt;/strong&gt;. Una forma de hacerlo seria apoy&amp;aacute;ndonos en el m&amp;eacute;todo est&amp;aacute;tico &lt;strong&gt;Defer&lt;/strong&gt; de &lt;strong&gt;Observable&lt;/strong&gt; tal y como se muestra a continuaci&amp;oacute;n.&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;internal&lt;/span&gt; IObservable&amp;lt;IEnumerable&amp;lt;Incidencia&amp;gt;&amp;gt; PrepararPeticion()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; Observable.Defer(() =&amp;gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;         var webRequest = &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;             WebRequest.Create(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Uri(&lt;span style="color:#006080;"&gt;&amp;quot;http://dgt.es/incidencias.xml&amp;quot;&lt;/span&gt;));&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;         webRequest.Method = &lt;span style="color:#006080;"&gt;&amp;quot;POST&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;         webRequest.ContentType = &lt;span style="color:#006080;"&gt;&amp;quot;text/XML&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;         var peticion = Observable.FromAsyncPattern&amp;lt;WebResponse&amp;gt;(&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;             webRequest.BeginGetResponse,&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;             webRequest.EndGetResponse);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; from elemento &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; peticion()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt;             .Select(respuestaWeb =&amp;gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  17:&lt;/span&gt;             {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  18:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (var rs = respuestaWeb.GetResponseStream())&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  19:&lt;/span&gt;                 {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  20:&lt;/span&gt;                     &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; rs.Deserialize(respuestaWeb.ContentLength);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  21:&lt;/span&gt;                 }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  22:&lt;/span&gt;             })&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  23:&lt;/span&gt;             select elemento;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  24:&lt;/span&gt;     });&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  25:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Para facilitarnos el trabajo vamos a encapsular el m&amp;eacute;todo en una clase llamada &lt;strong&gt;DgtContexto &lt;/strong&gt;y dentro del constructor de &amp;eacute;ste vamos a exponer la colecci&amp;oacute;n obtenida del Request y representada por el m&amp;eacute;todo PrepararPeticion() de la siguiente forma:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; DgtContexto(&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; frecuencia)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     PrepararPeticion()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;         .ObserveOnDispatcher()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;         .Subscribe(incidencias =&amp;gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;                         {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;                            &lt;span style="color:#008000;"&gt;//TODO&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;                         });&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Dentro de la clase DgtContexto debemos exponer una propiedad &lt;strong&gt;ObservableCollection&lt;/strong&gt; que ser&amp;aacute; la que posteriormente servir&amp;aacute; como origen de datos para la aplicaci&amp;oacute;n Windows Phone 7.&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; DgtContexto: INotifyPropertyChanged&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; ObservableCollection&amp;lt;Incidencia&amp;gt; Incidencias{ get; set; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; DateTime Hora { get; set; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; DgtContexto() {}&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;internal&lt;/span&gt; IObservable&amp;lt;IEnumerable&amp;lt;Incidencia&amp;gt;&amp;gt; PrepararPeticion() {}&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;  &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;event&lt;/span&gt; PropertyChangedEventHandler PropertyChanged;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt; }  &lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Adem&amp;aacute;s creamos una propiedad &lt;strong&gt;Hora&lt;/strong&gt; para conocer la fecha y hora de la informaci&amp;oacute;n que nos hemos descargado y por &amp;uacute;tlimo implementamos, la interfaz &lt;strong&gt;INotifyPropertyChanged&lt;/strong&gt; para propagar las modificaciones a la UI de la aplicaci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;Ahora toca el turno a c&amp;oacute;mo relacionamos la lista &lt;strong&gt;IEnumerable&amp;lt;Incidencia&amp;gt;&lt;/strong&gt; descargada del servidor de la DGT con la &lt;strong&gt;ObservableCollection&lt;/strong&gt; de la clase DgtContexto. Esta operaci&amp;oacute;n se realizar&amp;aacute; en la subscripci&amp;oacute;n a la colecci&amp;oacute;n retornada por el m&amp;eacute;todo PrepararPeticion(). Mediante expresiones lambda podemos obtener la acci&amp;oacute;n &lt;strong&gt;onNext&lt;/strong&gt; devuelta por el &lt;strong&gt;IObservable&lt;/strong&gt; en forma de &lt;strong&gt;Action&amp;lt;IEnumerable&amp;lt;Incidencia&amp;gt;&amp;gt;,&lt;/strong&gt; asignamos la lista iterativa &lt;strong&gt;IEnumerable&amp;lt;Incidencia&amp;gt;&lt;/strong&gt; a la &lt;strong&gt;ObservableCollection&lt;/strong&gt; y notificamos el cambio mediante la llamada a &lt;strong&gt;PropertyChanged&lt;/strong&gt; de la interfaz &lt;strong&gt;INotifyPropertyChanged&lt;/strong&gt; implementada anteriormente. Si, ya lo se, no es posible hacer un cast impl&amp;iacute;cito de una colecci&amp;oacute;n &lt;strong&gt;IEnumerable&amp;lt;Incidencia&amp;gt;&lt;/strong&gt; a una &lt;strong&gt;ObservableCollection&amp;lt;Incidencia&amp;gt;&lt;/strong&gt; y para ello vamos a crear un m&amp;eacute;todo extensor que lo haga:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; ObservableCollection&amp;lt;T&amp;gt; ToObservableCollection&amp;lt;T&amp;gt;(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt; IEnumerable&amp;lt;T&amp;gt; enumerable)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     var col = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; ObservableCollection&amp;lt;T&amp;gt;();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;             &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (var cur &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; enumerable)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;     {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;         col.Add(cur);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;     } &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;             &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; col;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt; } &lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Finalmente modificamos la propiedad &lt;strong&gt;Hora&lt;/strong&gt; y notificamos y en definitiva el constructor con la suscripci&amp;oacute;n completa quedar&amp;iacute;a de la siguiente forma:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; DgtContexto()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     PrepararPeticion()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;         .ObserveOnDispatcher()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;         .Subscribe(incidencias =&amp;gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;                         {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;                             Incidencias = incidencias.ToObservableCollection();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;                             NotifyPropertyChanged(&lt;span style="color:#006080;"&gt;&amp;quot;Incidencias&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;                             Hora = DateTime.Now;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;                             NotifyPropertyChanged(&lt;span style="color:#006080;"&gt;&amp;quot;Hora&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;                         });&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Tenemos creada la infraestructura pero no estamos sacando provecho &amp;ndash;del todo- a las Rx. Si queremos que la aplicaci&amp;oacute;n est&amp;eacute; monitorizando las modificaciones de la informaci&amp;oacute;n de la DGT podriamos crear un &lt;strong&gt;Timer&lt;/strong&gt; o un &lt;strong&gt;Thread&lt;/strong&gt; progamado para que lo consulte cada 3 minutos, por ejemplo. Otra opci&amp;oacute;n seria utilizar las extensiones de Rx, m&amp;aacute;s concretamente con los m&amp;eacute;todos &lt;strong&gt;Timer&lt;/strong&gt; y &lt;strong&gt;Select, conjuntamente&lt;/strong&gt;. El primero temporizar&amp;aacute; un periodo de tiempo representado por valores long desde 0 hasta &lt;strong&gt;TimeSpan.FromMinutes(frecuencia)&lt;/strong&gt; donde el valor pasado por defecto desde el constructor vac&amp;iacute;o es 3. Luego proyectamos todos los valores devueltos por PrepararPeticion() desde el XML de la DGT y lo transformamos la collecci&amp;oacute;n &lt;strong&gt;IObservable&lt;/strong&gt; m&amp;aacute;s reciente mediante el m&amp;eacute;todo &lt;strong&gt;Switch()&lt;/strong&gt;, con lo que el constructor quedar&amp;aacute; de la siguiente forma:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; DgtContexto(&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; frecuencia)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     Observable.Timer(TimeSpan.Zero, TimeSpan.FromMinutes(frecuencia))&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;         .Select(_ =&amp;gt; PrepararPeticion())&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;         .Switch()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;         .ObserveOnDispatcher()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;         .Subscribe(incidencias =&amp;gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;                         {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;                             Incidencias = incidencias.ToObservableCollection();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;                             NotifyPropertyChanged(&lt;span style="color:#006080;"&gt;&amp;quot;Incidencias&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;                             Hora = DateTime.Now;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;                             NotifyPropertyChanged(&lt;span style="color:#006080;"&gt;&amp;quot;Hora&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;                             System.Diagnostics.Debug.WriteLine(DateTime.Now.ToLongTimeString() + &lt;span style="color:#006080;"&gt;&amp;quot; &amp;quot;&lt;/span&gt; +&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;                                                                 Incidencias.Count.ToString());&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt;                             IsDataLoaded = &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  17:&lt;/span&gt;                         });&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  18:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Podreis encontrar la clase completa a final del post.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;Enlace con la UI&lt;/h1&gt;
&lt;p&gt;Para enlazar con la UI, basta con crear un proyecto Pivot o Panorama. En este blog indicar&amp;eacute; como crear los datos de ejemplo y como queda el XAML del MainPage.xaml con dos campos enlazados. B&amp;aacute;sicamente el enlace de datos es identico a como se hace normalmente. Adem&amp;aacute;s de lo comentado anteriormente unicamente hay que modificar el archivo App.cs. Por partes, el App.cs quedar&amp;aacute; as&amp;iacute;:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;partial&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; App : Application&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; DgtContexto viewModel = &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;/// A static ViewModel used by the views to bind against.&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;/// &amp;lt;returns&amp;gt;The MainViewModel object.&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; DgtContexto ViewModel&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;     {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;         get&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;         {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;             &lt;span style="color:#008000;"&gt;// Delay creation of the view model until necessary&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (viewModel == &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;                 viewModel = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; DgtContexto();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  17:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; viewModel;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  18:&lt;/span&gt;         }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  19:&lt;/span&gt;     }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  20:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  21:&lt;/span&gt; &lt;span style="color:#008000;"&gt;//el resto id&amp;eacute;ntico....&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  22:&lt;/span&gt; &lt;span style="color:#008000;"&gt;//NOTE: clase incompleta&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  23:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="color:#ff0000;font-size:x-small;"&gt;&lt;span style="text-decoration:underline;"&gt;NOTA: Unicamente he utilizado un par de campos en modo de test para comprobar el comportamiento de las Rx m&amp;aacute;s que de la propia pantalla&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;El archivo xml de muestra:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;DGT:DgtContexto&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;     &lt;span style="color:#ff0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;       &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#ff0000;"&gt;xmlns:x&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     &lt;span style="color:#ff0000;"&gt;xmlns:DGT&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;clr-namespace:desarrolloMobile.DGT;assembly=desarrolloMobile.DGT&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;     &lt;span style="color:#ff0000;"&gt;Hora&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;12/12/2011 12:00:00&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;     &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;DGT:DgtContexto.Incidencias&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;DGT:Incidencia&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Autonomia&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;CAT&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Carretera&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;A2&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;DGT:Incidencia&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Autonomia&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;MAD&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Carretera&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;A1&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;DGT:DgtContexto.Incidencias&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;     &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;DGT:DgtContexto&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Y el XAML de MainPage:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;phone:PhoneApplicationPage&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;     &lt;span style="color:#ff0000;"&gt;x:Class&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;desarrolloMobile.DGTViewer.MainPage&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#ff0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     &lt;span style="color:#ff0000;"&gt;xmlns:x&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;     &lt;span style="color:#ff0000;"&gt;xmlns:phone&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;     &lt;span style="color:#ff0000;"&gt;xmlns:shell&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;     &lt;span style="color:#ff0000;"&gt;xmlns:d&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://schemas.microsoft.com/expression/blend/2008&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;     &lt;span style="color:#ff0000;"&gt;xmlns:mc&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://schemas.openxmlformats.org/markup-compatibility/2006&amp;quot;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;     &lt;span style="color:#ff0000;"&gt;mc:Ignorable&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;d&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;d:DesignWidth&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;480&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;d:DesignHeight&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;768&amp;quot;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;     &lt;span style="color:#ff0000;"&gt;d:DataContext&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;{d:DesignData SampleData/MainViewModelSampleData.xaml}&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;     &lt;span style="color:#ff0000;"&gt;FontFamily&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;{StaticResource PhoneFontFamilyNormal}&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;     &lt;span style="color:#ff0000;"&gt;FontSize&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;{StaticResource PhoneFontSizeNormal}&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;     &lt;span style="color:#ff0000;"&gt;Foreground&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;{StaticResource PhoneForegroundBrush}&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;     &lt;span style="color:#ff0000;"&gt;SupportedOrientations&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Portrait&amp;quot;&lt;/span&gt;  &lt;span style="color:#ff0000;"&gt;Orientation&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Portrait&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;     &lt;span style="color:#ff0000;"&gt;shell:SystemTray&lt;/span&gt;.&lt;span style="color:#ff0000;"&gt;IsVisible&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;True&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  17:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;&amp;lt;!--Data context is set to sample data above and LayoutRoot contains the root grid where all other page content is placed--&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  18:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Grid&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;LayoutRoot&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Background&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Transparent&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  19:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  20:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;RowDefinition&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Height&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Auto&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  21:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;RowDefinition&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Height&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;*&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  22:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Grid.RowDefinitions&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  23:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  24:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;&amp;lt;!--TitlePanel contains the name of the application and page title--&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  25:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;StackPanel&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;TitlePanel&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Grid&lt;/span&gt;.&lt;span style="color:#ff0000;"&gt;Row&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Margin&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;12,17,0,28&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  26:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;TextBlock&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ApplicationTitle&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;MY APPLICATION&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Style&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;{StaticResource PhoneTextNormalStyle}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  27:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;TextBlock&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;PageTitle&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;page name&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Margin&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;9,-7,0,0&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Style&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;{StaticResource PhoneTextTitle1Style}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  28:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  29:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  30:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;&amp;lt;!--ContentPanel contains ListBox and ListBox ItemTemplate. Place additional content here--&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  31:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Grid&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ContentPanel&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Grid&lt;/span&gt;.&lt;span style="color:#ff0000;"&gt;Row&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Margin&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;12,0,12,0&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  32:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;ListBox&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;x:Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;MainListBox&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Margin&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;8,-44,-20,44&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ItemsSource&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;{Binding Incidencias}&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;SelectionChanged&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;MainListBox_SelectionChanged&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  33:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;ListBox.ItemTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  34:&lt;/span&gt;                     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  35:&lt;/span&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;StackPanel&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Margin&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;0,0,0,17&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Width&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;432&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  36:&lt;/span&gt;                           &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;TextBlock&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;{Binding Autonomia}&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;TextWrapping&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Wrap&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Style&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;{StaticResource PhoneTextExtraLargeStyle}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  37:&lt;/span&gt;                           &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;TextBlock&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;{Binding Carretera}&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;TextWrapping&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Wrap&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Margin&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;12,-6,12,0&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Style&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;{StaticResource PhoneTextSubtleStyle}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  38:&lt;/span&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  39:&lt;/span&gt;                     &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  40:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;ListBox.ItemTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  41:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;ListBox&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  42:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;TextBox&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Height&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;80&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Margin&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;0,0,181,8&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;TextWrapping&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Wrap&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;{Binding Ticks, Mode=OneWay}&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;VerticalAlignment&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Bottom&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;DataContext&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;{Binding Hora.TimeOfDay, Mode=OneWay}&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  43:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  44:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  45:&lt;/span&gt;  &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  46:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;phone:PhoneApplicationPage&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;La captura de pantalla de la aplicaci&amp;oacute;n funcionando mostrando un par de campos en modo de test:&lt;/div&gt;
&lt;div&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/Main_5F00_622A54D2.png"&gt;&lt;img height="445" width="263" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/Main_5F00_thumb_5F00_0C866023.png" alt="Main" border="0" title="Main" style="background-image:none;border-right-width:0px;margin:5px 5px 5px 0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;NOTA: Imagen de la futura aplicaci&amp;oacute;n q colgar&amp;eacute; en el MarketPlace a fecha de hoy y que implementa el c&amp;oacute;digo mostrado en este post.&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;h2&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2&gt;Otros retoques&lt;/h2&gt;
&lt;p&gt;Por lo que he podido observar existen un promedio de m&amp;aacute;s de 250 incidencias activas y ya q pretendo subir la aplicaci&amp;oacute;n al Marketplace he tratado q fuera algo m&amp;aacute;s util. Es por ello que adem&amp;aacute;s vamos a filtrar las incidencias por carretera, autonomia y poblaci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;La forma m&amp;aacute;s sencilla de hacerlo es utilizando la propia informaci&amp;oacute;n de la DGT, es decir hacer un &lt;strong&gt;SELECT DISTINCT &lt;/strong&gt;de carreteras, autonomias y poblaci&amp;oacute;n de las 200 y pico incidencias y las muestro en un formulario de forma que el usuario seleccione el valor por el que filtrar. El c&amp;oacute;digo es el siguiente para cada una de los filtros:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; var context = (from incidencia &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; App.ViewModel.Incidencias&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;                 select incidencia.Poblacion)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;                 .Distinct()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;                 .OrderBy(incidencia =&amp;gt; incidencia);&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Ahora, una vez mostrados por pantalla el usuario selecciona un valor, es decir, una carretera, una autonomia o una poblaci&amp;oacute;n. Sea cual sea lo que al final tenemos que hacer para mostrar los resultados filtrados es pasarle el valor de un predicado al m&amp;eacute;todo Where en el m&amp;eacute;todo &lt;strong&gt;Subscribe()&lt;/strong&gt; del constructor &lt;strong&gt;DgtContexto&lt;/strong&gt; de de la siguiente forma:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; DgtContexto(&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; frecuencia, Func&amp;lt;Incidencia, &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt;&amp;gt; predicado)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     Predicado = predicado;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;     Observable.Timer(TimeSpan.Zero, TimeSpan.FromMinutes(frecuencia))&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;         .Select(_ =&amp;gt; PrepararPeticion())&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;         .Switch()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;         .ObserveOnDispatcher()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;         .Subscribe(incidencias =&amp;gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;                         {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;                             IncidenciasTotal = incidencias.ToObservableCollection();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;                             Incidencias = (incidencias&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;                                 .Where(Predicado))&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;                                 .ToObservableCollection();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;                             NotifyPropertyChanged(&lt;span style="color:#006080;"&gt;&amp;quot;Incidencias&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt;                             Hora = DateTime.Now;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  17:&lt;/span&gt;                             NotifyPropertyChanged(&lt;span style="color:#006080;"&gt;&amp;quot;Hora&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  18:&lt;/span&gt;                             IsDataLoaded = &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  19:&lt;/span&gt;                         });&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  20:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;El tipo del predicado en los tres casos &amp;ndash;esto es, filtro por autonomia, poblaci&amp;oacute;n o carretera- sera del tipo&lt;strong&gt; Func&amp;lt;Incidencia,bool&amp;gt;.&lt;/strong&gt; Lo &amp;uacute;nico q hacemos es crear una propiedad de ese tipo llamado Predicado en la clase DgtContexto que asignaremos cuando el usuario seleccione un valor del filtro:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; lstBoxAutonomia_SelectionChanged(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, SelectionChangedEventArgs e)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     ((TextBlock) lstBoxAutonomia.SelectedItem).FontSize -= 6;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     App.ViewModel.Predicado = (incidencia =&amp;gt; incidencia.Autonomia == ((TextBlock) &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.lstBoxAutonomia.SelectedItem).Text);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;     NavigationService.GoBack();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; lstBoxPoblacion_SelectionChanged(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, SelectionChangedEventArgs e)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;     ((TextBlock)lstBoxPoblacion.SelectedItem).FontSize -= 6;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;     App.ViewModel.Predicado = (incidencia =&amp;gt; incidencia.Poblacion == ((TextBlock)&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.lstBoxPoblacion.SelectedItem).Text);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;     NavigationService.GoBack();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; lstBoxCarretera_SelectionChanged(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, SelectionChangedEventArgs e)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  17:&lt;/span&gt;     ((TextBlock)lstBoxCarretera.SelectedItem).FontSize -= 6;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  18:&lt;/span&gt;     App.ViewModel.Predicado = (incidencia =&amp;gt; incidencia.Carretera == ((TextBlock)&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.lstBoxCarretera.SelectedItem).Text);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  19:&lt;/span&gt;     NavigationService.GoBack();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  20:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;El resultado desde la interfaz gr&amp;aacute;fica es:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_1E164AEE.png"&gt;&lt;img height="507" width="788" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_13191E0C.png" alt="image" border="0" title="image" style="background-image:none;border-right-width:0px;margin:5px 5px 5px 0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Y el resultado del filtro por COMUNIDAD_CANARIA:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_2B2C629A.png"&gt;&lt;img height="542" width="294" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_7D9B1D09.png" alt="image" border="0" title="image" style="background-image:none;border-right-width:0px;margin:5px 5px 5px 0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Clase DgtContexto&lt;/h2&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Collections.ObjectModel;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.ComponentModel;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Linq;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Net;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; Microsoft.Phone.Reactive;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;namespace&lt;/span&gt; desarrolloMobile.DGT&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; DgtContexto : INotifyPropertyChanged&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;     {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; ObservableCollection&amp;lt;Incidencia&amp;gt; Incidencias { get; set; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; ObservableCollection&amp;lt;Incidencia&amp;gt; IncidenciasTotal { get; set; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; DateTime Hora { get; set; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  17:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  18:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; DgtContexto()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  19:&lt;/span&gt;             : &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;(3, incidencia =&amp;gt; &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  20:&lt;/span&gt;         { }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  21:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  22:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; Func&amp;lt;Incidencia, &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt;&amp;gt; _predicado;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  23:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; Func&amp;lt;Incidencia, &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt;&amp;gt; Predicado&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  24:&lt;/span&gt;         {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  25:&lt;/span&gt;             get&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  26:&lt;/span&gt;             {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  27:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; _predicado;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  28:&lt;/span&gt;             }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  29:&lt;/span&gt;             set&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  30:&lt;/span&gt;             {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  31:&lt;/span&gt;                 _predicado = &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  32:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (Incidencias != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  33:&lt;/span&gt;                 {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  34:&lt;/span&gt;                     Incidencias = Incidencias&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  35:&lt;/span&gt;                         .Where(Predicado)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  36:&lt;/span&gt;                         .ToObservableCollection();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  37:&lt;/span&gt;                     NotifyPropertyChanged(&lt;span style="color:#006080;"&gt;&amp;quot;Incidencias&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  38:&lt;/span&gt;                     IsDataLoaded = &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  39:&lt;/span&gt;                     NotifyPropertyChanged(&lt;span style="color:#006080;"&gt;&amp;quot;Vacio&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  40:&lt;/span&gt;                 }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  41:&lt;/span&gt;             }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  42:&lt;/span&gt;         }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  43:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  44:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; Vacio&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  45:&lt;/span&gt;         {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  46:&lt;/span&gt;             get&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  47:&lt;/span&gt;             {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  48:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; !IsDataLoaded;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  49:&lt;/span&gt;             }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  50:&lt;/span&gt;         }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  51:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  52:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  53:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; DgtContexto(&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; frecuencia, Func&amp;lt;Incidencia, &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt;&amp;gt; predicado)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  54:&lt;/span&gt;         {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  55:&lt;/span&gt;             Predicado = predicado;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  56:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  57:&lt;/span&gt;             Observable.Timer(TimeSpan.Zero, TimeSpan.FromMinutes(frecuencia))&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  58:&lt;/span&gt;                 .Select(_ =&amp;gt; PrepararPeticion())&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  59:&lt;/span&gt;                 .Switch()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  60:&lt;/span&gt;                 .ObserveOnDispatcher()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  61:&lt;/span&gt;                 .Subscribe(incidencias =&amp;gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  62:&lt;/span&gt;                                {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  63:&lt;/span&gt;                                    IncidenciasTotal = incidencias.ToObservableCollection();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  64:&lt;/span&gt;                                    Incidencias = (incidencias&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  65:&lt;/span&gt;                                        .Where(Predicado))&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  66:&lt;/span&gt;                                        .ToObservableCollection();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  67:&lt;/span&gt;                                    NotifyPropertyChanged(&lt;span style="color:#006080;"&gt;&amp;quot;Incidencias&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  68:&lt;/span&gt;                                    Hora = DateTime.Now;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  69:&lt;/span&gt;                                    NotifyPropertyChanged(&lt;span style="color:#006080;"&gt;&amp;quot;Hora&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  70:&lt;/span&gt;                                    System.Diagnostics.Debug.WriteLine(DateTime.Now.ToLongTimeString() + &lt;span style="color:#006080;"&gt;&amp;quot; &amp;quot;&lt;/span&gt; +&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  71:&lt;/span&gt;                                                                       Incidencias.Count.ToString());&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  72:&lt;/span&gt;                                    IsDataLoaded = &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  73:&lt;/span&gt;                                    NotifyPropertyChanged(&lt;span style="color:#006080;"&gt;&amp;quot;Vacio&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  74:&lt;/span&gt;                                });&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  75:&lt;/span&gt;         }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  76:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  77:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Actualizar()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  78:&lt;/span&gt;         {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  79:&lt;/span&gt;             Incidencias = IncidenciasTotal;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  80:&lt;/span&gt;             NotifyPropertyChanged(&lt;span style="color:#006080;"&gt;&amp;quot;Incidencias&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  81:&lt;/span&gt;             IsDataLoaded = &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  82:&lt;/span&gt;             NotifyPropertyChanged(&lt;span style="color:#006080;"&gt;&amp;quot;Vacio&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  83:&lt;/span&gt;         }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  84:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  85:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;internal&lt;/span&gt; IObservable&amp;lt;IEnumerable&amp;lt;Incidencia&amp;gt;&amp;gt; PrepararPeticion()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  86:&lt;/span&gt;         {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  87:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; Observable.Defer(() =&amp;gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  88:&lt;/span&gt;             {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  89:&lt;/span&gt;                 var webRequest =&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  90:&lt;/span&gt;                     WebRequest.Create(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Uri(&lt;span style="color:#006080;"&gt;&amp;quot;http://dgt.es/incidencias.xml&amp;quot;&lt;/span&gt;));&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  91:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  92:&lt;/span&gt;                 webRequest.Method = &lt;span style="color:#006080;"&gt;&amp;quot;POST&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  93:&lt;/span&gt;                 webRequest.ContentType = &lt;span style="color:#006080;"&gt;&amp;quot;text/XML&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  94:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  95:&lt;/span&gt;                 var peticion = Observable.FromAsyncPattern&amp;lt;WebResponse&amp;gt;(&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  96:&lt;/span&gt;                     webRequest.BeginGetResponse,&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  97:&lt;/span&gt;                     webRequest.EndGetResponse);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  98:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  99:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; from elemento &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; peticion()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 100:&lt;/span&gt;                     .Select(respuestaWeb =&amp;gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 101:&lt;/span&gt;                     {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 102:&lt;/span&gt;                         &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; (var rs = respuestaWeb.GetResponseStream())&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 103:&lt;/span&gt;                         {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 104:&lt;/span&gt;                             &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; rs.Deserialize(respuestaWeb.ContentLength);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 105:&lt;/span&gt;                         }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 106:&lt;/span&gt;                     })&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 107:&lt;/span&gt;                        select elemento;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 108:&lt;/span&gt;             });&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 109:&lt;/span&gt;         }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 110:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 111:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; IsDataLoaded&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 112:&lt;/span&gt;         {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 113:&lt;/span&gt;             get;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 114:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; set;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 115:&lt;/span&gt;         }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 116:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 117:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 118:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;event&lt;/span&gt; PropertyChangedEventHandler PropertyChanged;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 119:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; NotifyPropertyChanged(String propertyName)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 120:&lt;/span&gt;         {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 121:&lt;/span&gt;             var handler = PropertyChanged;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 122:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;null&lt;/span&gt; != handler)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 123:&lt;/span&gt;             {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 124:&lt;/span&gt;                 handler(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; PropertyChangedEventArgs(propertyName));&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 125:&lt;/span&gt;             }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 126:&lt;/span&gt;         }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 127:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 128:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; LoadData()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 129:&lt;/span&gt;         {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 130:&lt;/span&gt;             Incidencias = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; ObservableCollection&amp;lt;Incidencia&amp;gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 131:&lt;/span&gt;                               {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 132:&lt;/span&gt;                                   &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Incidencia&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 133:&lt;/span&gt;                                       {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 134:&lt;/span&gt;                                           Autonomia = &lt;span style="color:#006080;"&gt;&amp;quot;---&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 135:&lt;/span&gt;                                           Carretera = &lt;span style="color:#006080;"&gt;&amp;quot;---&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 136:&lt;/span&gt;                                       }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 137:&lt;/span&gt;                               };&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 138:&lt;/span&gt;         }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 139:&lt;/span&gt;     }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt; 140:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=190792" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Windows+Phone+7+Series/default.aspx">Windows Phone 7 Series</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Reactive+Extensions/default.aspx">Reactive Extensions</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/LINQ+to+XML/default.aspx">LINQ to XML</category></item><item><title>[Windows Phone 7] Utilizar un certificado propio en Outlook</title><link>http://geeks.ms/blogs/jmtorres/archive/2011/01/24/windows-phone-7-utilizar-un-certificado-propio-en-outlook.aspx</link><pubDate>Mon, 24 Jan 2011 05:49:13 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:187820</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=187820</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2011/01/24/windows-phone-7-utilizar-un-certificado-propio-en-outlook.aspx#comments</comments><description>&lt;p&gt;Hace relativamente poco acabo de recibir mi dispositivo Windows Phone 7. Tras tatar de conectarlo al Exchange de la empresa empezé a tener errores del estilo “Certificado no valido. Pongase en contacto con el administrador”.&lt;/p&gt;  &lt;p&gt;Pese que a priori no es solución muy elegante lo resolví de la siguiente forma. En primer lugar abrir el &lt;strong&gt;Office Web Application (OWA)&lt;/strong&gt; y miré que certificado es el que estaba utilizando –Si conoceis el nombre del certificado este paso lo podeis obviar- . En mi caso no es un certificado válido puesto que no está ortorgado por ninguna Autoridad Certificadora.&lt;/p&gt;  &lt;p&gt;Localicé el certificado en el &lt;strong&gt;snap in&lt;/strong&gt; o &lt;strong&gt;complemento de Certificados&lt;/strong&gt;, en el MMC del sistema operativo. Esto es:&lt;/p&gt;  &lt;p&gt;Ejecutar mmc:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_081B1DAB.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_0308BA2F.png" width="244" height="156" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;agregar complemento o SnapIn:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_2106C823.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_564FDA88.png" width="244" height="172" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;seleccionar Certificados o Certificates de &lt;strong&gt;“Mi Cuenta de Usuario”&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_33AB9C0D.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_2297485D.png" width="244" height="156" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Una vez detectado el certificado(*) dentro de la carpeta &lt;strong&gt;“Entidades de certificación raíz de confianza”&lt;/strong&gt; hacemos botón derecho y seleccionamos Exportar en el menú opciones. Lo exportamos a &lt;strong&gt;DER binario codificado X.509 (.CER)&lt;/strong&gt; tal y como se muestra en la siguiente imagen:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_728CF6DB.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_3D33BEA9.png" width="244" height="222" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;(*) Si accedemos al Outlook a través del Office Web Access (OWA) el propio Explorador Web nos dirá que certificado está utilizando.&lt;/p&gt;  &lt;p&gt;Seguidamente nos enviamos el archivo .cer del certicado adjunto por correo electronico a una cuenta que tengamos previamente configurada desde el dispositivo WP7. La cuestión es que al no tener ni acceso al sitema de archivos ni a los cetificados del dispositivo, el correo electronico es la unica forma de hacerlo llegar el archivo.cer referente&amp;#160; al certificado.&lt;/p&gt;  &lt;p&gt;Cuando recibimos el correo electronico desde el dispositivo WP7 con el archivo.cer adjunto, lo descargamos y posteriormente lo ejecutamos. Nos pedirá confirmación explícitica de que realmente queremos instalar el certifiicado y ya está.&lt;/p&gt;  &lt;p&gt;Ahora volvemos a tratar de &lt;strong&gt;sincronizar la cuenta de Outlook&lt;/strong&gt; y si todo está bien, empezaremos a tener el correo sincronizado.&lt;/p&gt;  &lt;p&gt;Espero que os sirva.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=187820" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Windows+Phone+7+Series/default.aspx">Windows Phone 7 Series</category></item><item><title>[OT] Foros MSDN sobre Windows Phone 7 en Español activos</title><link>http://geeks.ms/blogs/jmtorres/archive/2011/01/19/ot-foros-msdn-sobre-windows-phone-7-en-espa-241-ol-activos.aspx</link><pubDate>Wed, 19 Jan 2011 16:17:34 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:187629</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=187629</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2011/01/19/ot-foros-msdn-sobre-windows-phone-7-en-espa-241-ol-activos.aspx#comments</comments><description>&lt;p&gt;&lt;img style="margin:5px 5px 5px 0px;display:inline;float:right;" align="right" src="http://emovilpro.com/wp-content/uploads/2010/09/Windows-Phone-7-Logo.jpeg" width="131" height="133" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;Se han abierto recientemente el foro sobre Windows Phone 7 en Español, del cual soy administrador, en la siguiente dirección:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://social.msdn.microsoft.com/Forums/es-es/windowsphone7/threads?prof=required" href="http://social.msdn.microsoft.com/Forums/es-es/windowsphone7/threads?prof=required"&gt;http://social.msdn.microsoft.com/Forums/es-es/windowsphone7/threads?prof=required&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Os animo a que compartáis tanto dudas como experiencias sobre desarrollo en &lt;strong&gt;Windows Phone 7&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Nos vemos!!&lt;/p&gt;  &lt;p&gt;&lt;img src="http://tonirecio.files.wordpress.com/2007/04/foro2.jpg" alt="" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=187629" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Windows+Phone+7+Series/default.aspx">Windows Phone 7 Series</category></item><item><title>[Whitepaper gratuito] Comenzando con Open Data Protocol</title><link>http://geeks.ms/blogs/jmtorres/archive/2010/09/02/whitepaper-gratuito-comenzando-con-open-data-protocol.aspx</link><pubDate>Thu, 02 Sep 2010 06:56:30 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:181370</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=181370</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2010/09/02/whitepaper-gratuito-comenzando-con-open-data-protocol.aspx#comments</comments><description>&lt;p&gt;&lt;img style="display:inline;margin-left:0px;margin-right:0px;" align="right" src="http://t1.gstatic.com/images?q=tbn:ANd9GcQNbIqm1AMeJA8NNWalO7TFxMyvnDyKFSQp_oNItgsRwglyVVE&amp;amp;t=1&amp;amp;usg=__SXt-pkLTFcb4970ddUVvB5P7tgo=" alt="" /&gt;En el MIX de Las Vegas, ví las primeras demos y características de &lt;strong&gt;Open Data Protocol &lt;/strong&gt;–&lt;strong&gt;OData&lt;/strong&gt;- de la mano de nada más y nada menos que de &lt;strong&gt;Pablo Castro &lt;/strong&gt;y quede gratamente sorprendido pues redireccionaban el camino equivocado tomado hacia unos meses con Astoria. La verdad es que la idea inicial de Astoria era algo alentadora, pero no la puestra en práctica. La coletilla o pretexto de que OData era una evolución de Astoria, no decia mucho a su favor, en principio, pero despues de haberlo puesto en práctica en algunos determinados escenarios en mi actual empresa, estoy francamente satisfecho.&lt;/p&gt;  &lt;p&gt;Si bien es cierto que la idea subyacente de Astoria prometía, a la práctica no fue así. Los orígenes de datos expuestos eran propietarios. No puedo admitir que fuera ni un experto ni un fan, tanto de EF como de Astoria, pero lo cierto es que el poco contacto q tuve con ambas tecnologias simultáneamente admito que la experiencia no fue positiva.&lt;/p&gt;  &lt;p&gt;Entonces, ¿Que ha cambiado con OData? En primer lugar, &lt;strong&gt;Microsoft&lt;/strong&gt; anuncia a través de &lt;a href="http://www.microsoft.com/Interop/osp/default.mspx" target="_blank"&gt;&lt;strong&gt;Microsoft’s Open Specification Promise&lt;/strong&gt;&lt;/a&gt; (OSP) la estandarización de la tecnología. En segundo lugar tratar de dar solución a la exposición de orígenes de datos, relacionales o no, a través de un Servicio Web ejecutando operaciones con un lenguaje “estándar” basandose en:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;La creación de una forma uniforme de representación de datos estructurados a través de &lt;strong&gt;Atom&lt;/strong&gt; o &lt;strong&gt;JSON&lt;/strong&gt; (JavaScript Object Notation)&lt;/li&gt;    &lt;li&gt;La utilización de convenciones URL uniformes tanto para la navegación, filtrado, orden y paginación de datos (entre otros)&lt;/li&gt;    &lt;li&gt;La creación de operaciones uniformes dirigidas por dirección mediante las acciones GET, POST, PUT y DELETE.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;En definitiva no OData no es más que una estandarización de la creación y consumo de datos via Web que está construido sobre un conjunto de estándares de Internet, espcialmente &lt;a href="http://en.wikipedia.org/wiki/Atom_(standard)" target="_blank"&gt;Atom Publishing Protocol&lt;/a&gt;&lt;strong&gt; &lt;/strong&gt;o AtomPub especificado en &lt;strong&gt;RFD 5023&lt;/strong&gt; quien a su vez está sontruido sobre &lt;strong&gt;Atom Syndication Format&lt;/strong&gt; o Atom especificado en RFC4287.&lt;/p&gt;  &lt;p&gt;En este whitepaper he tratado de introducir la problemática y necesidades de la exposición de orígenes de datos con las tecnologias Web actuales y cómo OData soluciona parte de esas problemáticas. OData ofrece una gran variedad de operaciones sobre un conjunto de datos que nos aportan una mayor flexibilidad y optimización y por otra parte una alta integración con todo tipo de clientes:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Cualquier explorador Web&lt;/li&gt;    &lt;li&gt;Apps .NET Framework 3.5/4.0&lt;/li&gt;    &lt;li&gt;Silverlight 3/4&lt;/li&gt;    &lt;li&gt;Windows Phone 7&lt;/li&gt;    &lt;li&gt;Java / JavaScript&lt;/li&gt;    &lt;li&gt;PHP&lt;/li&gt;    &lt;li&gt;AJAX&lt;/li&gt;    &lt;li&gt;Excel 2010 PowerPoint&lt;/li&gt;    &lt;li&gt;LINQPad&lt;/li&gt;    &lt;li&gt;SQL Azure&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Además de mostrar cómo crear un servicio OData muestro varios ejemplos básicos sobre algunos de los cliente enumerados arriba. En definitiva, un Whitepaper que pretende presentar de una forma práctica &lt;strong&gt;Open Data Protocol&lt;/strong&gt; a cualquier desarrollador y empezar a valorar la utilidad de esta nueva apuesta para nuestros desarrollos.&lt;/p&gt;  &lt;h2&gt;Recursos&lt;/h2&gt;  &lt;p&gt;- &lt;a href="http://shop.campusmvp.com/Product-Whitepaper-Comenzando-con-OData-(PDF)_94.aspx" target="_blank"&gt;PDF/Libro electrónico&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;- &lt;a href="http://www.scribd.com/doc/36727832/Whitepaper-Comenzando-Con-OData-JM-Torres-Krasis-Press" target="_blank"&gt;Lectura OnLine&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;- &lt;a href="http://www.facebook.com/#!/campusMVP?ref=ts" target="_blank"&gt;Sigue los comentarios en la página de Facebook de CampusMVP&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=181370" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/WCF/default.aspx">WCF</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Windows+Phone+7+Series/default.aspx">Windows Phone 7 Series</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/.NET+Framework/default.aspx">.NET Framework</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/OData/default.aspx">OData</category></item><item><title>-Colecciones del ObjectModel- Coleccionando objetos en .NET Framework (III)</title><link>http://geeks.ms/blogs/jmtorres/archive/2010/07/07/colecciones-del-objectmodel-coleccionando-objetos-en-net-framework-iii.aspx</link><pubDate>Wed, 07 Jul 2010 18:06:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:179051</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=179051</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2010/07/07/colecciones-del-objectmodel-coleccionando-objetos-en-net-framework-iii.aspx#comments</comments><description>&lt;h1&gt;Introducci&amp;oacute;n&lt;/h1&gt;
&lt;p&gt;Esta serie de art&amp;iacute;culos pretende mostrar las caracter&amp;iacute;sticas y peculiaridades de las colecciones en .NET. El objetivo no es mostrar las situaciones en las que cada una de los diferentes tipos de colecciones pueden utilizarse en cada contexto sino la de conocer las mismas, ventajas y desventajas, para poder seleccionar el tipo de colecci&amp;oacute;n m&amp;aacute;s apropiado en cada momento.&lt;/p&gt;
&lt;p&gt;La serie cubre (entre corchetes el estado):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://josemigueltorres.net/boresight/?p=404"&gt;Colecciones No Genericas&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://josemigueltorres.net/boresight/?p=411"&gt;Colecciones Gen&amp;eacute;ricas System.Collections.Generic&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Colecciones de System.Collections.ObjectModel (este post)&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;Colecciones nuevas en CLR 4.0 (no es definitivo adem&amp;aacute;s solo hay una) &lt;/li&gt;
&lt;li&gt;Cota superior asint&amp;oacute;tica de las colecciones del CLI. aka Notaci&amp;oacute;n de Landau - O Grande- (en desarrollo) &lt;/li&gt;
&lt;li&gt;Power Collections y C5 (por ah&amp;iacute; andan) &lt;/li&gt;
&lt;li&gt;Rx&amp;nbsp; (si hay ganas y tiempo) &lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;Colecciones System.Collections.ObjectModel&lt;/h1&gt;
&lt;p&gt;Todas las colecciones agrupadas bajo &lt;strong&gt;System.Collections.ObjectModel &lt;/strong&gt;tiene como denominador com&amp;uacute;n que todas y cada una de ellas pueden ser utilizadas como modelo de objetos en librerias p&amp;uacute;blicas con la intenci&amp;oacute;n de ser extendidas.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Krzysztof Cwalina &lt;/strong&gt;expone sus razones por las cuales algunas de estas clases han sido clasificadas bajo dicho espacio de nombres &lt;strong&gt;en el siguiente &lt;/strong&gt;&lt;a target="_blank" href="http://blogs.msdn.com/b/kcwalina/archive/2005/03/15/396086.aspx"&gt;&lt;strong&gt;post&lt;/strong&gt;&lt;/a&gt;. B&amp;aacute;sicamente, la gran mayoria de desarrolladores nos conformaremos con utilizar las colecciones expuestas tanto en &lt;strong&gt;System.Collections &lt;/strong&gt;como en &lt;strong&gt;System.Collections.Generics &lt;/strong&gt;dejando las expuestas en &lt;strong&gt;ObjectModel &lt;/strong&gt;las utilizadas en menor medidad para otros usos no tan habituales como es&amp;nbsp; la generacci&amp;oacute;n de colecciones propietarias.&lt;/p&gt;
&lt;p&gt;Dicho esto, lo que pretende este post es introducir las 5 clases con las que se presenta .NET Framework 4.0 y que son:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;System.Collections.ObjectModel.Collection&amp;lt;T&amp;gt; &lt;/li&gt;
&lt;li&gt;System.Collections.ObjectModel.KeyedCollection&amp;lt;TKey,TItem&amp;gt; &lt;/li&gt;
&lt;li&gt;System.Collections.ObjectModel.ObservableCollection&amp;lt;T&amp;gt; &lt;/li&gt;
&lt;li&gt;System.Collections.ObjectModel.ReadOnlyCollection&amp;lt;T&amp;gt; &lt;/li&gt;
&lt;li&gt;System.Collections.ObjectModel.ReadOnlyObservableCollection&amp;lt;T&amp;gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;System.Collections.ObjectModel.Collection&amp;lt;T&amp;gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Collection&amp;lt;T&amp;gt;&lt;/strong&gt; se utiliza como clase base (pese a que no es abstracta) para la implementaci&amp;oacute;n de colecciones personalizadas. Para ello expone parte de sus m&amp;eacute;todos como virtuales, tales como &lt;strong&gt;ClearItems&lt;/strong&gt;, &lt;strong&gt;InsertItem&lt;/strong&gt;, &lt;strong&gt;RemoveItem &lt;/strong&gt;y &lt;strong&gt;SetItem&lt;/strong&gt;. Por lo tanto se recomienda que todo los desarroladores que pretendan generar una colecci&amp;oacute;n personalizada extiendan &lt;strong&gt;Collection&amp;lt;T&amp;gt;&lt;/strong&gt; en lugar de crear una desde zero.&lt;/p&gt;
&lt;p&gt;El propio &lt;strong&gt;.NET Framework &lt;/strong&gt;hace un uso extensivo de Collection&amp;lt;T&amp;gt; en gran parte de las colecciones utilizadas:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;System.Object&lt;/strong&gt; &lt;br /&gt;&lt;strong&gt;&amp;nbsp; System.Collections.ObjectModel.Collection&amp;lt;T&amp;gt;&lt;/strong&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Collections.ObjectModel.KeyedCollection&amp;lt;TKey, TItem&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Collections.ObjectModel.ObservableCollection&amp;lt;T&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.ComponentModel.BindingList&amp;lt;T&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.ComponentModel.SortDescriptionCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Net.IPEndPointCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Net.Mail.AlternateViewCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Net.Mail.AttachmentCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Net.Mail.LinkedResourceCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Net.Mail.MailAddressCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Net.PeerToPeer.CloudCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Net.PeerToPeer.Collaboration.PeerApplicationCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Net.PeerToPeer.Collaboration.PeerContactCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Net.PeerToPeer.Collaboration.PeerEndPointCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Net.PeerToPeer.Collaboration.PeerNearMeCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Net.PeerToPeer.Collaboration.PeerObjectCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Net.PeerToPeer.PeerNameRecordCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Security.Cryptography.CngPropertyCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.ServiceModel.Channels.BindingElementCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.ServiceModel.Channels.ChannelParameterCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.ServiceModel.Description.FaultDescriptionCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.ServiceModel.Description.MessageDescriptionCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.ServiceModel.Description.OperationDescriptionCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.ServiceModel.Description.PolicyAssertionCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.ServiceModel.Description.ServiceEndpointCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.ServiceModel.Dispatcher.MessageQueryCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.ServiceModel.Syndication.SyndicationElementExtensionCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Web.DynamicData.DataControlReferenceCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Web.Routing.RouteCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Web.UI.DataVisualization.Charting.ChartElementCollection&amp;lt;T&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Web.UI.ScriptReferenceCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Web.UI.ServiceReferenceCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Web.UI.UpdatePanelTriggerCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Windows.ConditionCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Windows.Forms.DataVisualization.Charting.ChartElementCollection&amp;lt;T&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Windows.Forms.FileDialogCustomPlacesCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Windows.Ink.StrokeCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Windows.Input.StylusPlugIns.StylusPlugInCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Windows.Input.StylusPointCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Windows.Input.TouchPointCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Windows.SetterBaseCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Windows.TriggerCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Workflow.ComponentModel.Compiler.ValidationErrorCollection&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;System.Collections.ObjectModel.KeyedCollection&amp;lt;TKey,TItem&amp;gt; &lt;/h3&gt;
&lt;p&gt;Se trata de una clases abstracta que como peculiaridad &lt;strong&gt;las claves estan incrustadas en sus valores&lt;/strong&gt;. Tal y como se define en el &lt;strong&gt;MSDN Library&lt;/strong&gt;, &lt;strong&gt;KeyedCollection&amp;lt;TKey,TItem&amp;gt; &lt;/strong&gt;es un conjunto infinito de tipos abstractos ya que la implementaci&amp;oacute;n depender&amp;aacute; en gran medida de los tipos genericos representados por &lt;strong&gt;TKey &lt;/strong&gt;y &lt;strong&gt;TItem&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;La clase &lt;strong&gt;KeyedCollection&amp;lt;TKey, TItem&amp;gt;&lt;/strong&gt; es un h&amp;iacute;brido entre una colecci&amp;oacute;n basada en &lt;strong&gt;IList&amp;lt;T&amp;gt;&lt;/strong&gt; y una colecci&amp;oacute;n basada en &lt;strong&gt;IDictionary&amp;lt;TKey, TValue&amp;gt; &lt;/strong&gt;y por tanto puede ser accedida mediante &amp;iacute;ndice y clave. La diferencia fundamental es que &amp;eacute;sta no es una par clave/valor ya que el propio valor agrupa tanto el valor en s&amp;iacute; como la clave. Su firma es:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;abstract&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; KeyedCollection&amp;lt;TKey, TItem&amp;gt; : Collection&amp;lt;TItem&amp;gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; KeyedCollection();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; KeyedCollection(IEqualityComparer&amp;lt;TKey&amp;gt; comparer);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; KeyedCollection(IEqualityComparer&amp;lt;TKey&amp;gt; comparer, &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; dictionaryCreationThreshold);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; IEqualityComparer&amp;lt;TKey&amp;gt; Comparer { get; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; TItem &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;[TKey key] { get; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; IDictionary&amp;lt;TKey, TItem&amp;gt; Dictionary { get; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; Contains(TKey key);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; Remove(TKey key);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; ChangeItemKey(TItem item, TKey newKey);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; ClearItems();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;abstract&lt;/span&gt; TKey GetKeyForItem(TItem item);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; InsertItem(&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; index, TItem item);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; RemoveItem(&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; index);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; SetItem(&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; index, TItem item);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Por ejemplo, &lt;strong&gt;KeyedCollection&amp;lt;int, Empleado&amp;gt; &lt;/strong&gt;puede contener una clave &amp;ldquo;234449&amp;rdquo; que pertenece como propiedad al propio elemento &lt;strong&gt;Empleado &lt;/strong&gt;(como por ejemplo el c&amp;oacute;digo del mismo) que se obtendr&amp;iacute;a a trav&amp;eacute;s del m&amp;eacute;todo abstracto &lt;strong&gt;GetKeyForItem() &lt;/strong&gt;de la siguiente forma:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Departamento : KeyedCollection&amp;lt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;, Empleado&amp;gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; Departamento () : &lt;span style="color:#0000ff;"&gt;base&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;, 0) {}&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; GetKeyForItem(Empleado empleado)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; empleado.Codigo;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;     &lt;span style="color:#008000;"&gt;//Clase incompleta&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;System.Collections.ObjectModel.ObservableCollection&amp;lt;T&amp;gt; &lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ms668604.aspx" title="http://msdn.microsoft.com/en-us/library/ms668604.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms668604.aspx&lt;/a&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Las colecciones &lt;strong&gt;&lt;a target="_blank"&gt;ObservableCollection&amp;lt;T&amp;gt;&lt;/a&gt;&lt;/strong&gt; fueron una de las caracter&amp;iacute;sitcas m&amp;aacute;s importantes introducidas a ra&amp;iacute;z de WPF y Silverlight posteriormente debido a la capacidad que tiene de propagar una modificaci&amp;oacute;n sobre el conjunto de elementos de la colecci&amp;oacute;n, a trav&amp;eacute;s de un par de interfaces que veremos a continuaci&amp;oacute;n, y que sirve como base para el Data Binding con los elementos o vistas WPF/Silverlight, por ejemplo.&lt;/p&gt;
&lt;p&gt;Si observamos la firma de ObservableCollection&amp;lt;T&amp;gt; vemos que adem&amp;aacute;s de implementar la clase abstracta &lt;strong&gt;Collection&amp;lt;T&amp;gt;,&lt;/strong&gt; implementa &lt;strong&gt;INotifyCollectionChanged&lt;/strong&gt; e &lt;strong&gt;INotifyPropertyChanged&lt;/strong&gt;.&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;[Serializable]&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; ObservableCollection&amp;lt;T&amp;gt; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    : Collection&amp;lt;T&amp;gt;, INotifyCollectionChanged, INotifyPropertyChanged&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;...&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Si vemos la definici&amp;oacute;n de &lt;strong&gt;INotifyCollectionChanged:&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;interface&lt;/span&gt; INotifyCollectionChanged&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;event&lt;/span&gt; NotifyCollectionChangedEventHandler CollectionChanged;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Vemos que implementa un evento del tipo &lt;strong&gt;NotifyCollectionChangedEventHandler &lt;/strong&gt;el cual notificar&amp;aacute; a los &amp;ldquo;subscriptores&amp;rdquo; &amp;ndash; o listeners en ingl&amp;eacute;s- ante cualquier modificaci&amp;oacute;n sobre el conjunto de elementos. Ojo, se utiliza la palabra subscriptores entre comillas pues no es una entorno publicador &amp;ndash; subscriptor real. (V&amp;eacute;ase &lt;a target="_blank" href="http://josemigueltorres.net/boresight/?p=369"&gt;&lt;strong&gt;Observer Design Pattern with .NET&lt;/strong&gt;&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Por otro lado, la interfaz &lt;strong&gt;INotifyPropertyChanged&lt;/strong&gt;:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;interface&lt;/span&gt; INotifyPropertyChanged&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;event&lt;/span&gt; PropertyChangedEventHandler PropertyChanged;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Es la que notificar&amp;aacute; las modificaciones, no sobre el conjunto de elementos, sino sobre los datos &amp;ndash;Propiedades- de cualquier elemento de la colecci&amp;oacute;n. Las interfaces WPF/Silverlight basados en Data Bindings son los t&amp;iacute;picos clientes de esta interfaz y son los que representan la modificaci&amp;oacute;n de cualquier propiedad de cualquier elemento de una colecci&amp;oacute;n &lt;strong&gt;ObservableCollection&amp;lt;T&amp;gt;&lt;/strong&gt; en el elemento enlazado de la interfaz.&lt;/p&gt;
&lt;p&gt;Por ejemplo supongamos que tenemos la clase Empleado que pertenecer&amp;aacute; a una ObservableCollection&amp;lt;T&amp;gt; y que posteriormente ser&amp;aacute; enlazada a la interfaz de una aplicaci&amp;oacute;n WPF. En primer lugar debemos implementar la interfaz INotifyPropertyChanged para proveer de un mecanismo de notificaci&amp;oacute;n sobre las propiedades de la clase. As&amp;iacute;, si la clase Empleado tiene dos propiedades llamadas Login y Nombre en ambos &lt;em&gt;setters &lt;/em&gt;de la propiedad deber&amp;iacute;amos ejecutar el evento PropertyChanged() tal y como se muestra a continuaci&amp;oacute;n:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Empleado : INotifyPropertyChanged&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;event&lt;/span&gt; PropertyChangedEventHandler PropertyChanged;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; _login;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; _nombre;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Login&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            get { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; _login; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            set&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                _login = &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                PropertyChanged(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;, &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                    &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; PropertyChangedEventArgs(&lt;span style="color:#006080;"&gt;&amp;quot;Login&amp;quot;&lt;/span&gt;));&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Nombre&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            get { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; _nombre; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            set&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                _nombre = &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                PropertyChanged(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;, &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                    &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; PropertyChangedEventArgs(&lt;span style="color:#006080;"&gt;&amp;quot;Nombre&amp;quot;&lt;/span&gt;));&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;A partir de aqu&amp;iacute;, la clase Empleado debe residir dentro de una colecci&amp;oacute;n ObservableCollection&amp;lt;Empleado&amp;gt; y ser enlazada a un elemento cualquier, por ejemplo un datagrid. Una ejemplo trivial con una &amp;uacute;nica grid y un boton que agregar&amp;iacute;a un nuevo empleado a la colecci&amp;oacute;n seria:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;partial&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; MainWindow : Window&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;readonly&lt;/span&gt; ObservableCollection&amp;lt;Empleado&amp;gt; users &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; ObservableCollection&amp;lt;Empleado&amp;gt;();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; MainWindow()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        InitializeComponent();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        datagrid1.DataContext = users;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; button1_Click(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        users.Add(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Empleado()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            Login = &lt;span style="color:#006080;"&gt;&amp;quot;jmtorres&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            Nombre = &lt;span style="color:#006080;"&gt;&amp;quot;Jos&amp;eacute; Miguel&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        });&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;En el XAML &amp;uacute;nicamente deberiamos hacer uso de los Data Bindings de WPF:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;DataGrid&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;dataGrid1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ItemsSource&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;{Binding}&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;AutoGenerateColumns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;False&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;DataGrid.Columns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;DataGridTextColumn&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Binding&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;{Binding Login}&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Header&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Login&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;DataGridTextColumn&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Binding&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;{Binding Nombre}&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Header&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Nombre&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;DataGrid.Columns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;DataGrid&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Canvas&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Click&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;button1_Click&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Button&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Canvas&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;A continuaci&amp;oacute;n detallo enlaces que tratan de forma m&amp;aacute;s espec&amp;iacute;fica los Data Bindings tanto en WPF como en Silverlight utilizando colecciones ObservableCollection&amp;lt;T&amp;gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;h5&gt;&lt;a href="http://sweux.com/blogs/psampaio/index.php/2009/04/28/an-introduction-to-observablecollection-in-wpf/"&gt;An Introduction to &lt;em&gt;ObservableCollection&lt;/em&gt; in &lt;em&gt;WPF&lt;/em&gt; | e-pedro.com&lt;/a&gt;&lt;/h5&gt;
&lt;h5&gt;&lt;a href="http://www.codeproject.com/KB/WPF/ObservableCollection.aspx"&gt;Working with &lt;em&gt;ObservableCollection&lt;/em&gt;&amp;lt;T&amp;gt; &amp;ndash; CodeProject&lt;/a&gt;&lt;/h5&gt;
&lt;h5&gt;&lt;a href="http://weblogs.asp.net/joelvarty/archive/2008/11/17/silverlight-databinding-the-observable-collection.aspx"&gt;&lt;em&gt;Silverlight&lt;/em&gt; Databinding &amp;ndash; The &lt;em&gt;Observable Collection&lt;/em&gt; - Joel Varty&lt;/a&gt;&lt;/h5&gt;
&lt;h5&gt;&lt;a href="http://blogs.msdn.com/b/msdnmagazine/archive/2008/11/28/9144980.aspx"&gt;Advanced Basics: The &lt;em&gt;ObservableCollection&lt;/em&gt; Class - MSDN Magazine &lt;b&gt;...&lt;/b&gt;&lt;/a&gt;&lt;/h5&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;System.Collections.ObjectModel.ReadOnlyCollection&amp;lt;T&amp;gt; &lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;ReadOnlyCollection&amp;lt;T&amp;gt;&lt;/strong&gt; es la versi&amp;oacute;n Solo Lectura de la colecci&amp;oacute;n &lt;strong&gt;Collection&amp;lt;T&amp;gt;&lt;/strong&gt;. Est&amp;aacute; especialmente para ser extendida en lugar de crear colecciones personalizadas desde zero y su peculiaridad, como su propio nombre indica es que &lt;strong&gt;carece de los 4 m&amp;eacute;todos que en la clase Collection&amp;lt;T&amp;gt;&lt;/strong&gt; estaban declarados como virtuales y que se detallan a continuaci&amp;oacute;n:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; ClearItems();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; InsertItem(&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; index, T item);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; RemoveItem(&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; index);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; SetItem(&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; index, T item);&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Por ultimo se detalla una relaci&amp;oacute;n de clases de .NET Framework que extienden las funcionalidades de &lt;strong&gt;ReadOnlyCollection&amp;lt;T&amp;gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;System.Object &lt;br /&gt;&amp;nbsp; System.Collections.ObjectModel.ReadOnlyCollection&amp;lt;T&amp;gt;&lt;/strong&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Collections.ObjectModel.ReadOnlyObservableCollection&amp;lt;T&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Data.Metadata.Edm.ReadOnlyMetadataCollection&amp;lt;T&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Security.Cryptography.ManifestSignatureInformationCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.ServiceModel.Channels.AddressHeaderCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Windows.Input.StylusButtonCollection &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Windows.Input.StylusDeviceCollection&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;System.Collections.ObjectModel.ReadOnlyObservableCollection&amp;lt;T&amp;gt;&lt;/h3&gt;
&lt;p&gt;La descripci&amp;oacute;n oficial que hace el &lt;strong&gt;MSDN Library &lt;/strong&gt;acerca de esta clase es que: &amp;ldquo;ReadOnlyObservableCollection es un wrapper &amp;ndash;una envoltura- de s&amp;oacute;lo lectura sobre una colecci&amp;oacute;n ObservableCollection&amp;rdquo;. La percepci&amp;oacute;n que tengo yo al respecto, siempre desde el respeto y la ignorancia especialmente sobre esta clase, es que no tengo ni &lt;span style="text-decoration:line-through;"&gt;pajolera&lt;/span&gt; idea de cual es su utilidad real llegando incluso a dudar de que realmente la tenga, con lo que no indagar&amp;eacute; m&amp;aacute;s al respecto.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=179051" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Visual+C_2300_/default.aspx">Visual C#</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/System.Collections/default.aspx">System.Collections</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/.NET+Framework/default.aspx">.NET Framework</category></item><item><title>-Colecciones Genericas- Coleccionando objetos en .NET Framework (II)</title><link>http://geeks.ms/blogs/jmtorres/archive/2010/06/15/colecciones-genericas-coleccionando-objetos-en-net-framework-ii.aspx</link><pubDate>Tue, 15 Jun 2010 17:07:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:178100</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=178100</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2010/06/15/colecciones-genericas-coleccionando-objetos-en-net-framework-ii.aspx#comments</comments><description>&lt;h5&gt;&lt;/h5&gt;
&lt;h1&gt;Introducci&amp;oacute;n&lt;/h1&gt;
&lt;p&gt;Esta serie de art&amp;iacute;culos pretende mostrar las caracter&amp;iacute;sticas y peculiaridades de las colecciones en .NET. El objetivo no es mostrar las situaciones en las que cada una de los diferentes tipos de colecciones pueden utilizarse en cada contexto sino la de conocer las mismas, ventajas y desventajas, para poder seleccionar el tipo de colecci&amp;oacute;n m&amp;aacute;s apropiado en cada momento.&lt;/p&gt;
&lt;p&gt;La serie cubre (entre corchetes el estado):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a target="_blank" href="http://josemigueltorres.net/boresight/?p=404"&gt;Colecciones No Genericas&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Colecciones Gen&amp;eacute;ricas System.Collections.Generic (este post) &lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Colecciones de System.Collections.ObjectModel (en desarrollo) &lt;/li&gt;
&lt;li&gt;Colecciones nuevas en CLR 4.0 (no es definitivo adem&amp;aacute;s solo hay una) &lt;/li&gt;
&lt;li&gt;Cota superior asint&amp;oacute;tica de las colecciones del CLI. aka Notaci&amp;oacute;n de Landau - O Grande- (en desarrollo) &lt;/li&gt;
&lt;li&gt;Power Collections y C5 (por ah&amp;iacute; andan) &lt;/li&gt;
&lt;li&gt;Rx&amp;nbsp; (si hay ganas y tiempo)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms379570"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;Colecciones Gen&amp;eacute;ricas&lt;/h1&gt;
&lt;p&gt;Sin lugar a dudas, uno de los conceptos que m&amp;aacute;s provecho ha sacado de la genericidad han sido las colecciones. Practicamente todas las colecciones utilizadas hasta entonces tienen su equivalente dentro del espacio de nombre &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/0sbxh9x2(v=VS.100).aspx"&gt;System.Collections.Generic&lt;/a&gt;&lt;strong&gt; &lt;/strong&gt;adem&amp;aacute;s de la aparici&amp;oacute;n de nuevas colecciones fruto de la flexibilidad que otorga los tipos gener&amp;eacute;ricos. &lt;/p&gt;
&lt;p&gt;En la siguiente tabla podemos ver algunas de estas colecciones (Fuente: Blog de &lt;a target="_blank" href="http://blogs.msdn.com/b/kcwalina/archive/2005/09/23/collections.aspx"&gt;Krzysztof Cwalina&lt;/a&gt; )&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;No Genericas&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Similares de tipo Generico&lt;/strong&gt; &lt;br /&gt;ArrayList&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;T&amp;gt; &lt;br /&gt;Hashtable&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dictionary&amp;lt;TKey,TValue&amp;gt; &lt;br /&gt;SortedList&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SortedList&amp;lt;TKey,TValue&amp;gt; &lt;br /&gt;Queue&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Queue&amp;lt;T&amp;gt; &lt;br /&gt;Stack&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Stack&amp;lt;T&amp;gt; &lt;br /&gt;IEnumerable&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IEnumerable&amp;lt;T&amp;gt; &lt;br /&gt;ICollection&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; N/A (use IEnumerable&amp;lt;T&amp;gt; anything that extends it) &lt;br /&gt;N/A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ICollection&amp;lt;T&amp;gt; &lt;br /&gt;IList&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IList&amp;lt;T&amp;gt; &lt;br /&gt;CollectionBase&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Collection&amp;lt;T&amp;gt; &lt;br /&gt;ReadOnlyCollectionBase&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ReadOnlyCollection&amp;lt;T&amp;gt; &lt;br /&gt;DictionaryBase&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; N/A (just implement IDictionary&amp;lt;TKey,TValue&amp;gt; &lt;br /&gt;N/A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SortedDictionary&amp;lt;TKey,TValue&amp;gt; &lt;br /&gt;N/A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; KeyedCollection&amp;lt;TKey,TItem&amp;gt; &lt;br /&gt;N/A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LinkedList&amp;lt;T&amp;gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;NOTA: No todas las colecciones gen&amp;eacute;ricas se encuentran en el espacio de nombres System.Collections.Generic. Algunas las veremos en el siguiente post bajo el espacio de nombre System.Collections.ObjectModel.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;De la misma forma que en la colecciones no gen&amp;eacute;ricas, me gustaria empezar desgranando el n&amp;uacute;cleo de toda colecci&amp;oacute;n: el iterador/enumerador.&lt;/p&gt;
&lt;h2&gt;El Enumerador gen&amp;eacute;rico&lt;/h2&gt;
&lt;p&gt;Como es de preveer existe una interfaz &lt;strong&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/78dfe2yb(v=VS.100).aspx"&gt;IEnumerator&amp;lt;T&amp;gt;&lt;/a&gt;&lt;/strong&gt; dentro del espacio de nombres &lt;strong&gt;System.Collections.Generic&lt;/strong&gt; cuya firma es: &lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;interface&lt;/span&gt; IEnumerator&amp;lt;&lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; T&amp;gt; : IDisposable, IEnumerator&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; T Current { get; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Por consiguiente, la interfaz &lt;strong&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/9eekhta0(v=VS.100).aspx"&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/a&gt;&lt;/strong&gt; tambi&amp;eacute;n tiene su equivalente gen&amp;eacute;rico y se describe como:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;interface&lt;/span&gt; IEnumerable&amp;lt;&lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; T&amp;gt; : IEnumerable&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; IEnumerator&amp;lt;T&amp;gt; GetEnumerator();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;NOTA: La importancia y funcionamiento de ambas se describe en el post anterior. &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;En dichas firmas ya empezamos a ver las primeras pecualiridades y es que en ambos casos cada una de las interfaces implementa su equivalente no gen&amp;eacute;rico para mantener la compatibilidad hac&amp;iacute;a las colecciones no gen&amp;eacute;ricas. Por otro lado &lt;strong&gt;IEnumerator&amp;lt;T&amp;gt;&lt;/strong&gt; implementa &lt;strong&gt;IDisposable&lt;/strong&gt;. La raz&amp;oacute;n nos la explica el propio Krzysztof Cwalina &lt;a target="_blank" href="http://blogs.msdn.com/b/kcwalina/archive/2005/01/07/348876.aspx"&gt;aqui&lt;/a&gt; y no es m&amp;aacute;s que para contemplar determinados escenarios d&amp;oacute;nde la colecci&amp;oacute;n que implementa &lt;strong&gt;IEnumerator&amp;lt;T&amp;gt;&lt;/strong&gt; pueda destruir recursos &amp;ldquo;&lt;em&gt;externos&lt;/em&gt;&amp;rdquo; utilizados tales como conexiones en base de datos para la lectura de filas o manejadores de archivos para la iteraci&amp;oacute;n de ficheros. Por &amp;uacute;ltimo ambas interfaces son covariantes a T en el CLR 4.0. &lt;/p&gt;
&lt;p&gt;Uno de los cambios m&amp;aacute;s importantes es la abstracci&amp;oacute;n de &lt;strong&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/92t2ye13(v=VS.100).aspx"&gt;ICollection&amp;lt;T&amp;gt;&lt;/a&gt;&lt;/strong&gt;. Si nos fijamos en la tabla de equivalencias del inicio de este post veremos que &lt;strong&gt;ICollection &lt;/strong&gt;no tiene ninguna equivalencia en la parte gen&amp;eacute;rica de la mismo forma que ICollection&amp;lt;T&amp;gt; tampoco la tiene en la parte no gen&amp;eacute;rica. Fij&amp;eacute;monos en su firma:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/92t2ye13(v=VS.100).aspx"&gt;ICollection&amp;lt;T&amp;gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;interface&lt;/span&gt; ICollection&amp;lt;T&amp;gt; : IEnumerable&amp;lt;T&amp;gt;, IEnumerable&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; Count { get; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; IsReadOnly { get; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Add(T item);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Clear();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; Contains(T item);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; CopyTo(T[] array, &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; arrayIndex);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; Remove(T item);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Las unicas propiedades que tienen en com&amp;uacute;n son &lt;strong&gt;CopyTo&lt;/strong&gt; y &lt;strong&gt;Count&lt;/strong&gt;. El m&amp;eacute;todo &lt;strong&gt;SyncRoot&lt;/strong&gt; y la propiedad &lt;strong&gt;IsSynchronized&lt;/strong&gt; se han eliminado y se han a&amp;ntilde;adido los m&amp;eacute;todos &lt;strong&gt;Add&lt;/strong&gt;, &lt;strong&gt;Contains&lt;/strong&gt;, &lt;strong&gt;Clear &lt;/strong&gt;y &lt;strong&gt;Remove&lt;/strong&gt;. Queda evidente pues que lo &amp;uacute;nico que comarten es el nombre ya que la abstracci&amp;oacute;n es bien distinta.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;NOTA: &lt;strong&gt;Krzysztof Cwalina &lt;/strong&gt;lo argumenta diciendo que en realidad &lt;strong&gt;ICollection &lt;/strong&gt;no tenia mucho sentido. .NET Framework no tenia ning&amp;uacute;n tipo de colecci&amp;oacute;n que representara una colecci&amp;oacute;n indexada de lectura y escritura; de ah&amp;iacute; surge &lt;strong&gt;ICollection&amp;lt;T&amp;gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;En cuanto a las equivalencias de &lt;strong&gt;IList &lt;/strong&gt;e &lt;strong&gt;IDictionary&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/5y536ey6(v=VS.100).aspx"&gt;IList&amp;lt;T&amp;gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;interface&lt;/span&gt; IList&amp;lt;T&amp;gt; : ICollection&amp;lt;T&amp;gt;, IEnumerable&amp;lt;T&amp;gt;, IEnumerable&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    T &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;[&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; index] { get; set; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; IndexOf(T item);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Insert(&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; index, T item);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; RemoveAt(&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; index);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/s4ys34ea(v=VS.100).aspx"&gt;IDictionary&amp;lt;TKey,TValue&amp;gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;interface&lt;/span&gt; IDictionary&amp;lt;TKey, TValue&amp;gt; : ICollection&amp;lt;KeyValuePair&amp;lt;TKey, TValue&amp;gt;&amp;gt;,&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                                             IEnumerable&amp;lt;KeyValuePair&amp;lt;TKey, TValue&amp;gt;&amp;gt;, IEnumerable&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    TValue &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;[TKey key] { get; set; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    ICollection&amp;lt;TKey&amp;gt; Keys { get; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    ICollection&amp;lt;TValue&amp;gt; Values { get; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; ContainsKey(TKey key);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Add(TKey key, TValue &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; Remove(TKey key);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; TryGetValue(TKey key, &lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; TValue &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Podriamos afirmar, pues que ambas tienen su correspondencia en el espacio de nombre &lt;strong&gt;System.Collections.Generic&lt;/strong&gt; pese a que &lt;strong&gt;IDictionary &lt;/strong&gt;tiene algunas pecualiridades debido a la flexibilidad de los gen&amp;eacute;ricos y que veremos m&amp;aacute;s tarde. Por &amp;uacute;ltimo siguen implementando la interfaz no gen&amp;eacute;rica &lt;strong&gt;IEnumerable &lt;/strong&gt;para mantener la compatibilidad con colecciones no gen&amp;eacute;ricas. &lt;/p&gt;
&lt;p&gt;Ahora veremos los diferentes tipos de colecciones en base a la interfaz que utilizan.&lt;/p&gt;
&lt;h1&gt;Colecciones Gen&amp;eacute;ricas&lt;/h1&gt;
&lt;h2&gt;Colecciones regulares (System.Collections.ICollection)&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;NOTA: Pese a que &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/92t2ye13(v=VS.100).aspx"&gt;MSDN Library afirma que tanto Queue&amp;lt;T&amp;gt; y Stack&amp;lt;T&amp;gt; hacen uso de ICollection&amp;lt;T&amp;gt;&lt;/a&gt; esto no es cierto. Implementan &lt;strong&gt;ICollection&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Este tipo de colecciones tambi&amp;eacute;n son conocidas como colecciones ordenadas o simplemente collecciones &amp;ndash;me he permitido la libertad de denominarlas est&amp;aacute;ndar o regulares para diferenciarlas de las espec&amp;iacute;ficas-. Hago hincapi&amp;eacute; en ello pues encontr&amp;eacute; varias formas de denomiarlas. De hecho, m&amp;aacute;s all&amp;aacute; de la colecci&amp;oacute;n Collection que como vimos anteriormente es abstracta y no es m&amp;aacute;s que una evoluci&amp;oacute;n de &lt;strong&gt;CollectionBase&lt;/strong&gt; utilizada en las versiones tempranas del CLR, existe un par de clases que podriamos catalogar dentro de este grupo y que vienen representadas por las clases &lt;strong&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/x2bb46cs(v=VS.100).aspx"&gt;Stack&amp;lt;T&amp;gt;&lt;/a&gt;&lt;/strong&gt; y &lt;strong&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/1ttzy8a4(v=VS.100).aspx"&gt;Queue&amp;lt;T&amp;gt;&lt;/a&gt;&lt;/strong&gt;. &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;NOTA: Ambas guardan una estrecha relaci&amp;oacute;n ya que en ambos casos los elementos se almacenan seg&amp;uacute;n el orden de llegada. N&amp;oacute;tese que el t&amp;eacute;rmino &amp;ldquo;ordenaci&amp;oacute;n&amp;rdquo; utilizado anteriormente no es una ordenaci&amp;oacute;n l&amp;oacute;gica sobre una propiedad del conjunto de elemento; este tipo de elementos los veremos m&amp;aacute;s adelante y podr&amp;iacute;an estar catalogados como colecciones especializadas.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;La diferencia principal entre &lt;strong&gt;Stack&amp;lt;T&amp;gt; &lt;/strong&gt;y &lt;strong&gt;Queue&amp;lt;T&amp;gt; &lt;/strong&gt;reside en el orden en el que los elementos son obtenidos. En ambos casos almacenan elementos en estricto orden de llegada y mientras que en la clase &lt;strong&gt;Stack&amp;lt;T&amp;gt; &lt;/strong&gt;responde a LIFO (Last Input First Output) en el caso de &lt;strong&gt;Queue&amp;lt;T&amp;gt;&lt;/strong&gt; responde a FIFO (First Input First Output). Ambas clases derivan de &lt;strong&gt;ICollection&lt;/strong&gt; e &lt;strong&gt;IClonable &lt;/strong&gt;y cada una de ellas utiliza un m&amp;eacute;todo distinto para a&amp;ntilde;adir y quitar un elemento de la colecci&amp;oacute;n. &lt;strong&gt;Push &lt;/strong&gt;y &lt;strong&gt;Pull &lt;/strong&gt;para &lt;strong&gt;Stack &lt;/strong&gt;y &lt;strong&gt;Enqueue &lt;/strong&gt;y &lt;strong&gt;Dequeu &lt;/strong&gt;para &lt;strong&gt;Queue&lt;/strong&gt;.&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;var queue = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Queue&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt;();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;var stack = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Stack&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt;();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;queue.Enqueue(&lt;span style="color:#006080;"&gt;&amp;quot;A&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;queue.Enqueue(&lt;span style="color:#006080;"&gt;&amp;quot;B&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;queue.Enqueue(&lt;span style="color:#006080;"&gt;&amp;quot;C&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;queue.Enqueue(&lt;span style="color:#006080;"&gt;&amp;quot;D&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;stack.Push(&lt;span style="color:#006080;"&gt;&amp;quot;A&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;stack.Push(&lt;span style="color:#006080;"&gt;&amp;quot;B&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;stack.Push(&lt;span style="color:#006080;"&gt;&amp;quot;C&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;stack.Push(&lt;span style="color:#006080;"&gt;&amp;quot;D&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;Console.WriteLine(&lt;span style="color:#006080;"&gt;&amp;quot;Dequeue-ing...&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (var elemento &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; queue)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    Console.WriteLine(elemento);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;Console.WriteLine(&lt;span style="color:#006080;"&gt;&amp;quot;Pop-ing...&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (var elemento &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; stack)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    Console.WriteLine(elemento);&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Colecciones (System.Collections.Generic.ICollection&amp;lt;T&amp;gt;)&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/2s4xk11f(v=VS.100).aspx"&gt;LinkedList&amp;lt;T&amp;gt;&lt;/a&gt;&lt;/strong&gt; es una colecci&amp;oacute;n de nodos enlazados que implementa, entre otros &lt;strong&gt;ICollection&amp;lt;T&amp;gt;&lt;/strong&gt;. El nucleo central de &lt;strong&gt;LinkedList&amp;lt;T&amp;gt;&lt;/strong&gt; es &lt;strong&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/ahf4c754(v=VS.100).aspx"&gt;System.Collections.Generic.LinkedListNode&amp;lt;T&amp;gt;&lt;/a&gt;&lt;/strong&gt; la cual es una clase cuya caracteristica fundamental es que almacena el nodo immediatamente posterior y anterior y portanto todos y cada uno de los nodos mantienen una referencia de orden. M&amp;aacute;s info: &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Linked_list"&gt;Wikipedia&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A partir de aqu&amp;iacute; el funcionamiento es relativamente sencillo. Lo que iremos almacenando son objetos del tipo &lt;strong&gt;LinkedListNode&amp;lt;T&amp;gt; &lt;/strong&gt;de tipo T en una colecci&amp;oacute;n &lt;strong&gt;LinkedList&amp;lt;T&amp;gt;&lt;/strong&gt;. Las ventajas que nos ofrece este tipo de listas que podemos insertar immediantamente antes o despues de un determinado nodo practicamente con un coste O(1)&amp;nbsp; a trav&amp;eacute;s de los m&amp;eacute;todos &lt;strong&gt;AddBefore()&lt;/strong&gt; y &lt;strong&gt;AddAfter()&lt;/strong&gt;. Adem&amp;aacute;s podremos a&amp;ntilde;adir un elemento al inicio o al final de la lista enlazada mediante &lt;strong&gt;AddFirst() &lt;/strong&gt;y &lt;strong&gt;AddLast() &lt;/strong&gt;respectivamente. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;LinkedList&amp;lt;T&amp;gt; &lt;/strong&gt;mantiene siempre tanto el primer como el &amp;uacute;ltimo nodo a trav&amp;eacute;s de las propiedades &lt;strong&gt;First &lt;/strong&gt;y &lt;strong&gt;Last &lt;/strong&gt;siempre y cuando el objecto &lt;strong&gt;LinkedList&amp;lt;T&amp;gt;&lt;/strong&gt; tenga m&amp;aacute;s de 0 elementos (linkedList.Count =&amp;gt; 1).&amp;nbsp; En el siguiente ejemplo, aunque trivial, muestra alguna de las posibilidades de &lt;strong&gt;LinkedList&amp;lt;T&amp;gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;var linkedList = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; LinkedList&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt;();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;//a&amp;ntilde;adimos el que va a ser el primer elemento &lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;linkedList.AddFirst(&lt;span style="color:#006080;"&gt;&amp;quot;Alfa&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;//mantenemos una instanacia al ultimo &lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;//elemento insertado mediante linkedListNode&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;//NOTA: tambien podriamos utilizar linkedList.AddLast...&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;var linkedListNode = linkedList.AddAfter(linkedList.First, &lt;span style="color:#006080;"&gt;&amp;quot;Beta&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;linkedListNode = linkedList.AddAfter(linkedListNode, &lt;span style="color:#006080;"&gt;&amp;quot;Eco&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;linkedListNode = linkedList.AddAfter(linkedListNode, &lt;span style="color:#006080;"&gt;&amp;quot;November&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;//como por ejemplo aqui&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;linkedList.AddLast(&lt;span style="color:#006080;"&gt;&amp;quot;Romeo&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;linkedList.AddLast(&lt;span style="color:#006080;"&gt;&amp;quot;Zulu&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;//insertamos despues de &amp;quot;Eco&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;linkedListNode = linkedList.Find(&lt;span style="color:#006080;"&gt;&amp;quot;Eco&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (linkedListNode != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;) &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    linkedList.AddBefore(linkedListNode, &lt;span style="color:#006080;"&gt;&amp;quot;Delta&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt;(var elemento &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; linkedList)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    Console.WriteLine(elemento);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;//resultados...&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;//Alfa&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;//Beta&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;//Eco&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;//November&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;//Romeo&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;//Zulu&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;Colecciones espec&amp;iacute;ficas &lt;/h2&gt;
&lt;p&gt;Otro tipo de agrupamiento para las colecciones espec&amp;iacute;ficas (es decir, las que se extienden m&amp;aacute;s all&amp;aacute; de &lt;strong&gt;ICollection&lt;/strong&gt;) es de colecciones de acceso por clave o por &amp;iacute;ndice. A continuaci&amp;oacute;n veremos el conjunto de colecciones agrupadas por clave (a trav&amp;eacute;s de &lt;strong&gt;IDictionary&amp;lt;TKey, TValue&amp;gt;&lt;/strong&gt;) y posteriormente las que son agrupadas por &amp;iacute;ndice (a trav&amp;eacute;s de &lt;strong&gt;IList&amp;lt;T&amp;gt;&lt;/strong&gt;) y por &amp;uacute;ltimo aquellas colecciones que hacen uso tanto de las caracter&amp;iacute;sticas de &amp;iacute;ndice y de clave.&lt;/p&gt;
&lt;h3&gt;Derivadas de System.Collections.Generics.IList&amp;lt;T&amp;gt;&lt;/h3&gt;
&lt;p&gt;En el ejemplo con el que abr&amp;iacute;amos el primer post vimos un ejemplo con &lt;strong&gt;System.Array&lt;/strong&gt;, un claro ejemplo de colecci&amp;oacute;n basado en &amp;iacute;ndices, tambi&amp;eacute;n conocido en ingl&amp;eacute;s como zero-based indexed collection. &lt;strong&gt;System.ArrayList &lt;/strong&gt;es otro claro ejemplo de colecci&amp;oacute;n indexada que surge de la necesidad de poder redimensionar el tama&amp;ntilde;o de una colecci&amp;oacute;n de forma din&amp;aacute;mica, limitaci&amp;oacute;n encontrada en &lt;strong&gt;System.Array&lt;/strong&gt;. De hecho, &lt;strong&gt;ArrayList &lt;/strong&gt;podr&amp;iacute;a ser descrita como un h&amp;iacute;brido entre una colecci&amp;oacute;n y una matriz de elementos ya que los elemento siguen almacen&amp;aacute;ndose en orden de llegada pese a que pueden ser obtenidos mediante el &amp;iacute;ndice relativo de la propia colecci&amp;oacute;n. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/6sh2ey19(v=VS.100).aspx"&gt;System.Collections.Generics.List&amp;lt;T&amp;gt;&lt;/a&gt;&lt;/strong&gt; es equivalente natural a &lt;strong&gt;ArrayList &lt;/strong&gt;en la parte de genericos. Es en esencial un &lt;strong&gt;ArrayList mejorada en rendimiento, tama&amp;ntilde;o y velocidad&lt;/strong&gt;. Es quiz&amp;aacute;s la colecci&amp;oacute;n m&amp;aacute;s utilizada y m&amp;aacute;s adecuada a la gran mayoria de escenarios debido a su flexibilidad y caracter&amp;iacute;sticas.&lt;/p&gt;
&lt;p&gt;En cuanto a la capacidad, de la misma forma que en ArrayList, podemos indic&amp;aacute;rsela en el constructor o bien no hacerlo y la propia colecci&amp;oacute;n ir&amp;aacute; redimension&amp;aacute;ndose. Debido al coste que tiene la operaci&amp;oacute;n de redimensionamiento, &lt;strong&gt;List&amp;lt;T&amp;gt;&lt;/strong&gt; crece en bloques del doble de su capacidad, siendo 4 su capacidad inicial, si no se indica el tama&amp;ntilde;o por defecto. Esto significa que tras la instanciaci&amp;oacute;n de:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;var list = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:#0000ff;"&gt;double&lt;/span&gt;&amp;gt; { 20.0d };&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;//list.Capacity = 4&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;//list.Count = 1&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;El objeto list poseer&amp;aacute; una capacidad de 4 elementos, tres de ellos null. Tras ir a&amp;ntilde;adiendo m&amp;aacute;s elementos list siempre ir&amp;aacute; creciendo en orden de 4, 8, 16, 32, 64, &amp;hellip; elementos dejando los no utilizados con el valor por defecto de cada tipo, esto es default(T), o m&amp;aacute;s concretamente null para los tipos por referencia y 0 para los tipos por valor. Indentificaremos la capacidad total mediante la propiedad Capacity, siempre multiples de 4, y la cantidad de elementos no null/0 mediante Count.&lt;/p&gt;
&lt;p&gt;Podemos exigir que un objeto &lt;strong&gt;List&amp;lt;T&amp;gt; &lt;/strong&gt;tenga un tama&amp;ntilde;o fijo predefinido. Sin embargo, es muy com&amp;uacute;n confundir esta limitaci&amp;oacute;n o caracter&amp;iacute;stica con la cantidad de elementos que se le puede pasar por par&amp;aacute;metro en el constructor de la clase &lt;strong&gt;List&amp;lt;T&amp;gt;&lt;/strong&gt;. Otro error com&amp;uacute;n es indicar una capacidad elevada en previsi&amp;oacute;n de crecimiento. Si es cierto que esto es una buena practica si el numero de elementos a a&amp;ntilde;adir es finalmente inferior a la capacidad inicial, no lo es si el numero de elementos final es superior puesto que el crecimiento de la ArrayList ser&amp;aacute; multiple a la capacidad inicial. Es decir, por ejemplo, el siguiente ejemplo crea un &lt;strong&gt;List&amp;lt;T&amp;gt; &lt;/strong&gt;con un tama&amp;ntilde;o predefinido de 100 elementos. Por un lado podemos ver como el objeto arrayList acepta 1000 elemento (10 veces m&amp;aacute;s de lo inicialmente previsto) sin ning&amp;uacute;n problema. Sin embargo, tras el bucle podemos observar que la capcidad &amp;ndash;Capacity- (no cantidad &amp;ndash;Count- de elementos) es de 1600 y es debido a que el crecimiento ha sido de 100, 200, 400, 800 y 1600. O sea que tenemos un &lt;strong&gt;List&amp;lt;T&amp;gt;&lt;/strong&gt; de 1600 elementos de capacidad y realmente se estan utilizando 1000.&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;var list = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt;(100);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; i = 0; i &amp;lt;= 1000; i++)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    list.Add(i.ToString());&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;//list.Capacity = 1600&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;//list.Count = 1000&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Si hacemos la misma interaci&amp;oacute;n sin un tama&amp;ntilde;o predefinido, la capacidad final ser&amp;aacute; de 1024.&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;var list = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; List&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt;();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; i = 0; i &amp;lt;= 1000; i++)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    list.Add(i.ToString());&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;//list.Capacity = 1024&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;//list.Count = 1000&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Derivadas de System.Collections.Generics.IDictionary&amp;lt;T&amp;gt;&lt;/h3&gt;
&lt;p&gt;La diferencia fundamental entre &lt;strong&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/dd321008(v=VS.100).aspx"&gt;SortedList&amp;lt;TKey,TValue&amp;gt;&lt;/a&gt; &lt;/strong&gt;y &lt;strong&gt;List&amp;lt;T&amp;gt;&lt;/strong&gt; es que mientras en &lt;strong&gt;List&amp;lt;T&amp;gt; &lt;/strong&gt;se almacenan los elemento por orden de &amp;ldquo;llegada&amp;rdquo; en &lt;strong&gt;SortedList&amp;lt;TKey,TValue&amp;gt;&lt;/strong&gt; se almacena una pareja valor/clave y tanto se puede acceder por clave como por &amp;iacute;ndice.&lt;/p&gt;
&lt;p&gt;Internamente, &lt;strong&gt;SortedList&amp;lt;TKey,TValue&amp;gt; &lt;/strong&gt;mantiene dos objetos &lt;strong&gt;IList&amp;lt;T&amp;gt;&lt;/strong&gt; internos, uno para el almacenamiento de claves y otro para el almacenamiento de valores la cuales se acceden mediante un objeto de la clase &lt;strong&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/5tbh8a42(v=VS.100).aspx"&gt;KeyValuePair&amp;lt;TKey,TValue&amp;gt;&lt;/a&gt;&lt;/strong&gt;. Como su propio nombre indica, &lt;strong&gt;SortedList&amp;lt;TKey,TValue&amp;gt; &lt;/strong&gt;mantiene el conjunto de elementos ordenados por clave. La clave puede ordenarse en funci&amp;oacute;n a una implementaci&amp;oacute;n espec&amp;iacute;fica de &lt;strong&gt;IComparer&amp;lt;T&amp;gt; &lt;/strong&gt;o bien mediante la interfaz &lt;strong&gt;IComparable&amp;lt;T&amp;gt; &lt;/strong&gt;que los propios tipos de las claves &amp;ndash; de sus elementos - indican. En el siguiente ejemplo a&amp;ntilde;adimos 4 elementos de tipo string y observamos el resultado. Fij&amp;eacute;monos como el IComparer&amp;lt;T&amp;gt; por defecto es CaseSensitive es decir System.Collections.Generic.Comparer&amp;lt;T&amp;gt;.Default (ya que est&amp;aacute; utilizando la implementaci&amp;oacute;n &lt;strong&gt;IComparable&amp;lt;T&amp;gt; &lt;/strong&gt;derivado de la clase String).&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;var sortedList = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; SortedList&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;,&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt;()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                                 {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                                     {&lt;span style="color:#006080;"&gt;&amp;quot;Z&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;Z&amp;quot;&lt;/span&gt;},&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                                     {&lt;span style="color:#006080;"&gt;&amp;quot;A&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;A&amp;quot;&lt;/span&gt;},&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                                     {&lt;span style="color:#006080;"&gt;&amp;quot;a&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;a&amp;quot;&lt;/span&gt;},&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                                     {&lt;span style="color:#006080;"&gt;&amp;quot;B&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;B&amp;quot;&lt;/span&gt;}&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                                 };&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (var elemento &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; sortedList)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    Console.WriteLine(elemento.Value);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;//Resultado:&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;//a&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;//A&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;//B&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;//Z&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Sin embarago, si utiliz&amp;aacute;ramos un &lt;strong&gt;IComparer&amp;lt;T&amp;gt;&lt;/strong&gt; propio y especificaramos explicitamente que la comparaci&amp;oacute;n sea Case Insensitive, obtendriamos un error ya que no es posible a&amp;ntilde;adir dos elemento con la misma clave al tratar de la misma forma o valor las cadenas &amp;ldquo;a&amp;rdquo; y &amp;ldquo;A&amp;rdquo;:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; CaseInsensitiveComparerSample&amp;lt;T&amp;gt; : IComparer&amp;lt;T&amp;gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; Compare(T x, T y)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; ((&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; CaseInsensitiveComparer())&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            .Compare(y, x));&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;//implementaci&amp;oacute;n&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;var sortedList = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; SortedList&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;,&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt;(&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; CaseInsensitiveComparerSample&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt;()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                )&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                                 {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                                     {&lt;span style="color:#006080;"&gt;&amp;quot;Z&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;Z&amp;quot;&lt;/span&gt;},&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                                     {&lt;span style="color:#006080;"&gt;&amp;quot;A&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;A&amp;quot;&lt;/span&gt;},&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                                     &lt;span style="color:#008000;"&gt;// Argument Exception&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                                     {&lt;span style="color:#006080;"&gt;&amp;quot;a&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;a&amp;quot;&lt;/span&gt;},&lt;span style="color:#008000;"&gt;// Item has already been added. &lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                                     &lt;span style="color:#008000;"&gt;// Key in dictionary: &amp;#39;A&amp;#39;  Key being added: &amp;#39;a&amp;#39;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                                     {&lt;span style="color:#006080;"&gt;&amp;quot;B&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;B&amp;quot;&lt;/span&gt;}&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                                 };&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/xfhwa508(v=VS.100).aspx"&gt;Dictionary&amp;lt;TKey,TValue&amp;gt;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Dictionary&amp;lt;TKey, TValue&amp;gt;&lt;/strong&gt; es un &lt;strong&gt;HashTable&lt;/strong&gt; fuertemente tipado. La diferencia entre ambos se encuentra en como gestiona las colisiones de los codigos hash de sus elementos en el algoritmo hash. Mientras que HasTable realiza un sondeo cuando existe una colision reubicando el elemento en el siguiente cubo &amp;ndash;bucket- libre mientras que &lt;strong&gt;Dictionary&amp;lt;TKey, TValue&amp;gt;&lt;/strong&gt; realiza un encadenamiento de los elementos con un mismo codigo hash almacen&amp;aacute;ndolos en una lista asociada a un mismo cubo &amp;ndash;&lt;strong&gt;bucket&lt;/strong&gt;-. Para obtener m&amp;aacute;s informaci&amp;oacute;n al respecto podeis consultar el post &lt;a target="_blank" href="http://blogs.msdn.com/b/kcwalina/archive/2004/08/06/210297.aspx"&gt;System.Collections.Generic Dictionary Capacity, Hashing, and Collisions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Por lo dem&amp;aacute;s y como comentamos antes el funcionamiento es en esencial el de un &lt;strong&gt;HashTable&lt;/strong&gt;. Todos los elementos implementan de forma expl&amp;iacute;cita o impl&amp;iacute;cita un c&amp;oacute;digo Hash, a trav&amp;eacute;s, por ejemplo, de la clase base &lt;strong&gt;System.Object. &lt;/strong&gt;Como peculiaridad, &lt;strong&gt;Dictionary&amp;lt;TKey,TValue&amp;gt;&lt;/strong&gt; utiliza la tambi&amp;eacute;n estructura &lt;strong&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/5tbh8a42.aspx"&gt;KeyValuePair&amp;lt;TKey,TValue&amp;gt;&lt;/a&gt; &lt;/strong&gt;en lugar de la estructura &lt;strong&gt;DictionaryEntry&lt;/strong&gt; que utiliza &lt;strong&gt;HasTable&lt;/strong&gt;. Un ejemplo sencillo seria:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;var dictionary = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;,&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                                {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                                    {616000, &lt;span style="color:#006080;"&gt;&amp;quot;Juan M.&amp;quot;&lt;/span&gt;},&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                                    {616100, &lt;span style="color:#006080;"&gt;&amp;quot;Rafael H.&amp;quot;&lt;/span&gt;},&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                                    {616200, &lt;span style="color:#006080;"&gt;&amp;quot;Joaquin A.&amp;quot;&lt;/span&gt;},&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                                    {616210, &lt;span style="color:#006080;"&gt;&amp;quot;Alberto P.&amp;quot;&lt;/span&gt;}&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                                };&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (KeyValuePair&amp;lt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;,&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt; elemento &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; dictionary)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    Console.WriteLine(&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;Key: {0} Value:{1}&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                        elemento.Key, elemento.Value));&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/f7fta44c(v=VS.100).aspx"&gt;SortedDictionary&amp;lt;TKey,TValue&amp;gt;&lt;/a&gt; &lt;/h4&gt;
&lt;p&gt;La colecci&amp;oacute;n que mezcla las capacidades del &lt;strong&gt;Dictonary&amp;lt;TKey, TValue&amp;gt; &lt;/strong&gt;con un conjunto de claves ordenado como hac&amp;iacute;a &lt;strong&gt;SortedList&amp;lt;T&amp;gt;&lt;/strong&gt; es &lt;strong&gt;SortedDictionary&amp;lt;TKey, TValue&amp;gt;&lt;/strong&gt;. Aqui es d&amp;oacute;nde reside la mayor&amp;iacute;a de las preguntas que nos hacemos acerca de cu&amp;aacute;l tipo de colecci&amp;oacute;n utilizar. &lt;/p&gt;
&lt;p&gt;Seg&amp;uacute;n informaci&amp;oacute;n del MSDN Library, establece que:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Where the two classes differ is in memory use and speed of insertion and removal:&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms132319.aspx"&gt;&lt;em&gt;SortedList&amp;lt;TKey, TValue&amp;gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt; uses less memory than SortedDictionary&amp;lt;TKey, TValue&amp;gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;SortedDictionary&amp;lt;TKey, TValue&amp;gt; has faster insertion and removal operations for unsorted data: O(log n) as opposed to O(n) for &lt;/em&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms132319.aspx"&gt;&lt;em&gt;SortedList&amp;lt;TKey, TValue&amp;gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;If the list is populated all at once from sorted data, &lt;/em&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms132319.aspx"&gt;&lt;em&gt;SortedList&amp;lt;TKey, TValue&amp;gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt; is faster than SortedDictionary&amp;lt;TKey, TValue&amp;gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Veamos las diferencias reales de los dos primeros puntos: memoria y rendimiento.&lt;/p&gt;
&lt;h5&gt;Memoria&lt;/h5&gt;
&lt;p&gt;Para tratar de hacer una comparativa del tama&amp;ntilde;o de memoria utilizado entre uno y otro vamos a ejecutar un c&amp;oacute;digo que lo &amp;uacute;nico que har&amp;aacute; es a&amp;ntilde;adir 1.000.000 de elementos string de clave int. &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;NOTA: La inserci&amp;oacute;n se hace de forma secuencias con lo que el coste en la operaci&amp;oacute;n de agregaci&amp;oacute;n ser&amp;aacute; mucho menor en &lt;strong&gt;SortedList&lt;/strong&gt;. Esto es una excepci&amp;oacute;n puesto que por norma general el valor de la clave ser&amp;aacute; desordenada y es en ese punto, cuando hablemos del rendimiento lo veremos, d&amp;oacute;nde &lt;strong&gt;SortedDictionary &lt;/strong&gt;es mucho m&amp;aacute;s r&amp;aacute;pido.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Lo realmente importante del siguiente c&amp;oacute;digo es el espacio en memoria que se utiliza para la manipulaci&amp;oacute;n de los dos objectos &lt;strong&gt;SortedList &lt;/strong&gt;y &lt;strong&gt;SortedDictionary&lt;/strong&gt;:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;var sortedList =&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; SortedList&amp;lt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt;();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;var sortedDictionary =&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; SortedDictionary&amp;lt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt;();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; items = 1000000;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; items; i++)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        sortedList.Add(i,i.ToString());&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; items; i++)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    sortedDictionary.Add(i,i.ToString());&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Tras la ejecuci&amp;oacute;n con &lt;strong&gt;CLRProfiler &lt;/strong&gt;vemos el grafo de asignaci&amp;oacute;n de bytes en memoria de:&lt;/p&gt;
&lt;p&gt;la SortedList:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image16_5F00_7C73AA49.png"&gt;&lt;img height="130" width="708" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image16_5F00_thumb_5F00_3D5279EE.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;y la representacci&amp;oacute;n de SortedDictionary:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image12_5F00_1AAE3B73.png"&gt;&lt;img height="158" width="702" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image12_5F00_thumb_5F00_2D168C28.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Como podemos comprobar el espacio asignado en memoria es superior en el caso de SortedDictionary.&lt;/p&gt;
&lt;p&gt;Como curiosidad podemos apreciar como cada uno de los objetos trata de forma bien distinta la informaci&amp;oacute;n en memoria. &lt;strong&gt;SortedList &lt;/strong&gt;al final acaba generando dos &lt;strong&gt;Arrays&lt;/strong&gt;, una de claves y otra de valores del tipo &lt;strong&gt;System.Int32[] &lt;/strong&gt;y &lt;strong&gt;System.String[] &lt;/strong&gt;respectivamente. Por otro lado, &lt;strong&gt;SortedDictionary &lt;/strong&gt;hace uso de un tipo utilizado internamente llamado &lt;strong&gt;Generic.TreeSet&lt;/strong&gt;. Este tipo es un arbol binario utilizado, como dije antes, &lt;strong&gt;de forma interna &lt;/strong&gt;para la manipulaci&amp;oacute;n de objetos del tipo &lt;strong&gt;Dictionary&lt;/strong&gt;. &lt;strong&gt;La raz&amp;oacute;n por la cual no est&amp;aacute; expuesta como API p&amp;uacute;blica &lt;/strong&gt;es debido a que el enfoque de este mismo tipo seria muy diferente. B&amp;aacute;sicamente Microsoft decidi&amp;oacute; utilizar &amp;uacute;nicamente de forma interna y no exponerla como API p&amp;uacute;blica. Adem&amp;aacute;s de &lt;strong&gt;Generic.TreeSet &lt;/strong&gt;podemos ver un objeto &lt;strong&gt;System.String &lt;/strong&gt;que es d&amp;oacute;nde almacena el valor del objeto &lt;strong&gt;SortedDictionary&lt;/strong&gt;.&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;internal&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; TreeSet&amp;lt;T&amp;gt; : ICollection&amp;lt;T&amp;gt;, IEnumerable&amp;lt;T&amp;gt;, ICollection, &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    IEnumerable, ISerializable, IDeserializationCallback &lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h5&gt;Rendimiento&lt;/h5&gt;
&lt;p&gt;Para trata de evaluar el rendimiento entre ambas colecciones vamos a realizar una prueba muy similar, pero no vamos a dar ventaja a SortedList a&amp;ntilde;adiendo elementos ordenados y es por ello que vamos a substituir las claves del tipo int al tipo &lt;strong&gt;System.Guid &lt;/strong&gt;gener&amp;aacute;ndose uno diferente cada vez de forma que &lt;strong&gt;SortedList &lt;/strong&gt;tenga que ordenar la clave tras cada inserci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;El c&amp;oacute;digo podria ser algo tal que as&amp;iacute;:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;var sortedList =&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; SortedList&amp;lt;Guid, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt;();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;var sortedDictionary =&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; SortedDictionary&amp;lt;Guid, &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt;();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; items = 100000;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; items; i++)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        sortedList.Add(Guid.NewGuid(), i.ToString());&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; items; i++)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    sortedDictionary.Add(Guid.NewGuid(), i.ToString());&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;El resultado del &lt;strong&gt;Performance Profiling del VS 2010 &lt;/strong&gt;es tal y como muestra la siguiente captura de pantalla.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_2A8D5A6A.png"&gt;&lt;img height="187" width="939" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_72F7997B.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;La operaci&amp;oacute;n &lt;strong&gt;SortedList.Add &lt;/strong&gt;ocupa m&amp;aacute;s del 97% del tiempo total de ejecuci&amp;oacute;n del c&amp;oacute;digo mientras que &lt;strong&gt;SortedDictionary.Add &lt;/strong&gt;apenas llega al 2% por lo tanto queda demostrado el rendimiento entre ambas clases en operaciones de inserci&amp;oacute;n y eliminaci&amp;oacute;n.&lt;/p&gt;
&lt;h1&gt;Conclusi&amp;oacute;n&lt;/h1&gt;
&lt;p&gt;Adem&amp;aacute;s de las nombradas en este post existen otras menos utilizadas dentro del espacio de nombre de colecciones gen&amp;eacute;ricas. &lt;/p&gt;
&lt;h2&gt;Otras referencias&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://en.how-to.mobi/index.php?sd=es&amp;amp;id=221691"&gt;http://en.how-to.mobi/index.php?sd=es&amp;amp;id=221691&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://blogs.msdn.com/b/kcwalina/archive/2004/08/06/210297.aspx"&gt;http://blogs.msdn.com/b/kcwalina/archive/2004/08/06/210297.aspx&lt;/a&gt; &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=178100" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Visual+C_2300_/default.aspx">Visual C#</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/System.Collections/default.aspx">System.Collections</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/.NET+Framework/default.aspx">.NET Framework</category></item><item><title>-Colecciones No Genericas- Coleccionando objetos en .NET Framework (I)</title><link>http://geeks.ms/blogs/jmtorres/archive/2010/06/08/colecciones-no-genericas-coleccionando-objetos-en-net-framework-i.aspx</link><pubDate>Tue, 08 Jun 2010 17:41:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:177808</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=177808</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2010/06/08/colecciones-no-genericas-coleccionando-objetos-en-net-framework-i.aspx#comments</comments><description>&lt;h1&gt;Introducci&amp;oacute;n&lt;/h1&gt;
&lt;p&gt;Esta serie de art&amp;iacute;culos pretende mostrar las caracter&amp;iacute;sticas y peculiaridades de las colecciones en .NET. El objetivo no es mostrar las situaciones en las que cada una de los diferentes tipos de colecciones pueden utilizarse en cada contexto sino la de conocer las mismas, ventajas y desventajas, para poder seleccionar el tipo de colecci&amp;oacute;n m&amp;aacute;s apropiado en cada momento.&lt;/p&gt;
&lt;p&gt;La serie cubre (entre corchetes el estado):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Colecciones No Genericas (actual post)&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;Colecciones Gen&amp;eacute;ricas de System.Collections.Generic (en desarrollo) &lt;/li&gt;
&lt;li&gt;Colecciones de System.Collections.ObjectModel (en mi cabeza) &lt;/li&gt;
&lt;li&gt;Colecciones nuevas en CLR 4.0 (no es definitivo adem&amp;aacute;s solo hay una) &lt;/li&gt;
&lt;li&gt;Cota superior asint&amp;oacute;tica de las colecciones del CLI. aka Notaci&amp;oacute;n de Landau - O Grande- (en desarrollo)&lt;/li&gt;
&lt;li&gt;Power Collections y C5 (por ah&amp;iacute; andan) &lt;/li&gt;
&lt;li&gt;Rx&amp;nbsp; (si hay ganas y tiempo) &lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;&amp;iquest;Que es una colecci&amp;oacute;n?&lt;/h1&gt;
&lt;p&gt;Se entiende como colecci&amp;oacute;n un conjunto de entidades l&amp;oacute;gicamente relacionadas &amp;ndash;es decir que deber&amp;iacute;an tener algo en com&amp;uacute;n-. As&amp;iacute; una colecci&amp;oacute;n de objetos de tipo string podr&amp;iacute;a ser declarada como un System.Array de la siguiente forma en C#.&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;var cadenas = &lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;string&lt;/span&gt;[]&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                     {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                        &lt;span style="COLOR:#006080;"&gt;&amp;quot;A&amp;quot;&lt;/span&gt;, &lt;span style="COLOR:#006080;"&gt;&amp;quot;B&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                     };&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Sin embargo, esta declaraci&amp;oacute;n tiene algunos matices como por ejemplo que en muy pocas ocasiones conocemos el tama&amp;ntilde;o fijo que tendr&amp;aacute; y por lo tanto se convierte en una limitaci&amp;oacute;n del propio System.Array, por ejemplo. B&amp;aacute;sicamente, las caracter&amp;iacute;sticas y comportamiento del tipo de colecci&amp;oacute;n a utilizar nos ayudar&amp;aacute; o limitar&amp;aacute; en mayor o menor medida.&lt;/p&gt;
&lt;p&gt;Por lo tanto, primero de todo me gustar&amp;iacute;a empezar definiendo que es para &lt;strong&gt;.NET Framework&lt;/strong&gt; una colecci&amp;oacute;n. Desde el punto de vista de .NET Framework, una colecci&amp;oacute;n es cualquier tipo que implemente &lt;strong&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/es-es/library/system.collections.icollection(v=VS.100).aspx"&gt;System.Collections.ICollection&lt;/a&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/es-es/library/system.collections.idictionary(v=VS.100).aspx"&gt;System.Collections.IDictionary&lt;/a&gt;&lt;/strong&gt; o &lt;strong&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/es-es/library/system.collections.ilist(v=VS.100).aspx"&gt;System.Collections.IList&lt;/a&gt;&lt;/strong&gt;, sin embargo no siempre tenemos claro que otorga especialemente cada una de estas interfaces. Vayamos por partes.&lt;/p&gt;
&lt;h2&gt;El Enumerador&lt;/h2&gt;
&lt;p&gt;Si empezaramos a desgranar todos los tipos de colecciones disponibles en el &lt;strong&gt;CLR&lt;/strong&gt; encontrar&amp;iacute;amos un denominador com&amp;uacute;n &amp;ldquo;oculto&amp;rdquo;, la interfaz &lt;strong&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/es-es/library/system.collections.ienumerator(v=VS.100).aspx"&gt;IEnumerator&lt;/a&gt;&lt;/strong&gt;. Si para que una colecci&amp;oacute;n sea considerada como tal en .NET Fx debe implementar una de las 3 interfazes expuestas anteriormente, todas estas interfaces deben implementar &lt;strong&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/es-es/library/system.collections.ienumerable(v=VS.100).aspx"&gt;IEnumerable&lt;/a&gt;&lt;/strong&gt; la cual no hace m&amp;aacute;s exponer un &lt;strong&gt;IEnumerator&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Podr&amp;iacute;amos empezar mostrando la firma tanto de &lt;strong&gt;ICollection&lt;/strong&gt;:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;[ComVisible(&lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;)]&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;interface&lt;/span&gt; ICollection : IEnumerable&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; Count { get; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; SyncRoot { get; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; IsSynchronized { get; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; CopyTo(Array array, &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; index);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;como de &lt;strong&gt;IDictionary&lt;/strong&gt; &lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;[ComVisible(&lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;)]&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;interface&lt;/span&gt; IDictionary : ICollection, IEnumerable&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;[&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; key] { get; set; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    ICollection Keys { get; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    ICollection Values { get; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; IsReadOnly { get; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; IsFixedSize { get; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; Contains(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; key);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Add(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; key, &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Clear();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; IDictionaryEnumerator GetEnumerator();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Remove(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; key);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;como de &lt;strong&gt;IList&lt;/strong&gt;.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;[ComVisible(&lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;)]&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;interface&lt;/span&gt; IList : ICollection, IEnumerable&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;[&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; index] { get; set; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; IsReadOnly { get; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; IsFixedSize { get; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; Add(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; Contains(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Clear();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; IndexOf(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Insert(&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; index, &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Remove(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; RemoveAt(&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; index);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Y para empezar nos encontramos con otra caracter&amp;iacute;stica que seguro muchos no hab&amp;iacute;amos visto anteriormente y es que &lt;strong&gt;tanto IDictionary com IList implementan, a su vez ICollection&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;Es aqu&amp;iacute;, en este punto, d&amp;oacute;nde empieza a avistarse la diferencia entre las tres interfaces y podemos catalogarlas en dos conjuntos: &lt;strong&gt;Colecciones est&amp;aacute;ndar o regulares&lt;/strong&gt; y &lt;strong&gt;Colecciones espec&amp;iacute;ficas&lt;/strong&gt;. Es obvio que tras ver la firma de cada una de ellas podemos afirmar que &lt;strong&gt;IList&lt;/strong&gt; y &lt;strong&gt;IDictionary&lt;/strong&gt; son colecciones espec&amp;iacute;ficas (ambas extienden ICollection) e &lt;strong&gt;ICollection&lt;/strong&gt; es una colecci&amp;oacute;n est&amp;aacute;ndard o regular.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;NOTA: Utilizo el t&amp;eacute;rmio &amp;ldquo;espec&amp;iacute;ficas&amp;rdquo; no especializadas &amp;ndash;Specialized- cuyas colecciones estan en el espacio &lt;strong&gt;System.Collections.Specialized&lt;/strong&gt; y que veremos m&amp;aacute;s tarde.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Primera pregunta que surge, &amp;iquest;Conociendo que &lt;strong&gt;System.Collection.List&lt;/strong&gt; es el principal &amp;ldquo;consumidor&amp;rdquo; de &lt;strong&gt;IList&lt;/strong&gt; y que &lt;strong&gt;Collection&lt;/strong&gt; hace lo mismo de &lt;strong&gt;ICollection&lt;/strong&gt;, cu&amp;aacute;l de ellas deber&amp;iacute;amos utilizar? La respuesta es relativamente sencilla. Collection, a diferencia de List es una clase abstracta y por tanto debe ser implementada para ser extendida. Esto nos da una pista que la soluci&amp;oacute;n reside en que Collection debe ser utilizada para ser expuesta a trav&amp;eacute;s de un API p&amp;uacute;blica mientras que List implementa m&amp;eacute;todos de b&amp;uacute;squeda y ordenaci&amp;oacute;n espec&amp;iacute;ficas listas para usar.&lt;/p&gt;
&lt;p&gt;Volviendo al n&amp;uacute;cleo central del tema, es decir a &lt;strong&gt;IEnumerator&lt;/strong&gt;, observamos que las tres interfaces adem&amp;aacute;s implementan &lt;strong&gt;IEnumerable&lt;/strong&gt; con lo que es buen momento par aver la firma de la misma:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;interface&lt;/span&gt; IEnumerable&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    IEnumerator GetEnumerator();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Tal y como se puede observar, y se ha comentado anteriormente, &lt;strong&gt;IEnumerable&lt;/strong&gt; no hace m&amp;aacute;s que retornar un &lt;strong&gt;IEnumerator&lt;/strong&gt;. Es importante conocer y entender la figura de un enumerador/iterador pues es el que va a permitir la iteraci&amp;oacute;n sobre cada uno de los elementos de una colecci&amp;oacute;n. La sentencia &lt;strong&gt;&lt;em&gt;foreach&lt;/em&gt;&lt;/strong&gt;, por ejemplo, hace uso de &amp;eacute;l. &lt;strong&gt;IEnumerator&lt;/strong&gt; &amp;uacute;nicamente permite la iteraci&amp;oacute;n, nunca la modificaci&amp;oacute;n del elemento. De hecho, si observamos su firma:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;interface&lt;/span&gt; IEnumerator&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; Current { get; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; MoveNext();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Reset();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
Podemos ver que, exluyendo &lt;strong&gt;Reset&lt;/strong&gt;, tanto &lt;strong&gt;Current&lt;/strong&gt; como &lt;strong&gt;MoveNext&lt;/strong&gt; son m&amp;eacute;todos de navegaci&amp;oacute;n o iteraci&amp;oacute;n entre collecciones. El mecanismo es sencillo; &lt;strong&gt;Current&lt;/strong&gt; indica un valor indefinido y por tanto se lanza una llamada a &lt;strong&gt;MoveNext&lt;/strong&gt;. Si esta retorna &lt;strong&gt;True&lt;/strong&gt;, &lt;strong&gt;Current&lt;/strong&gt; contiene el primer elemento de la colecci&amp;oacute;n y as&amp;iacute; lo har&amp;aacute; mientras el valor de &lt;strong&gt;MoveNext&lt;/strong&gt; vaya siendo &lt;strong&gt;True&lt;/strong&gt;. En el momento que &amp;eacute;ste sea &lt;strong&gt;False&lt;/strong&gt;, &lt;strong&gt;Current&lt;/strong&gt; indicar&amp;aacute; al &amp;uacute;ltimo elemento de la colecci&amp;oacute;n. &lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;NOTA: El m&amp;eacute;todo &lt;strong&gt;Reset&lt;/strong&gt; se mantiene &amp;uacute;nicamente por compatibilidad COM con lo que queda fuera del alcance de este art&amp;iacute;culo.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1&gt;Colecciones No Gen&amp;eacute;ricas&lt;/h1&gt;
&lt;h2&gt;Colecciones regulares (System.Collections.ICollection)&lt;/h2&gt;
&lt;p&gt;Este tipo de colecciones tambi&amp;eacute;n son conocidas como colecciones ordenadas(*) o simplemente collecciones &amp;ndash;me he permitido la libertad de denominarlas est&amp;aacute;ndar o regulares para diferenciarlas de las espec&amp;iacute;ficas-. Hago hincapi&amp;eacute; en ello pues encontr&amp;eacute; varias formas de denomiarlas. De hecho, m&amp;aacute;s all&amp;aacute; de la colecci&amp;oacute;n &lt;strong&gt;Collection&lt;/strong&gt; que como vimos anteriormente &lt;strong&gt;es abstracta&lt;/strong&gt; y no es m&amp;aacute;s que una evoluci&amp;oacute;n de &lt;strong&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/es-es/library/system.collections.collectionbase(v=VS.100).aspx"&gt;CollectionBase&lt;/a&gt;&lt;/strong&gt; utilizada en las versiones tempranas del &lt;strong&gt;CLR&lt;/strong&gt;, existe un par de clases que podriamos catalogar dentro de este grupo y que vienen representadas por las clases &lt;strong&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/es-es/library/system.collections.stack(v=VS.100).aspx"&gt;Stack&lt;/a&gt;&lt;/strong&gt; y &lt;strong&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/es-es/library/system.collections.queue(v=VS.100).aspx"&gt;Queue&lt;/a&gt;&lt;/strong&gt;. &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;NOTA: (*) Ambas guardan una estrecha relaci&amp;oacute;n ya que en ambos casos los elementos se almacenan seg&amp;uacute;n el orden de llegada. N&amp;oacute;tese que el t&amp;eacute;rmino &amp;ldquo;ordenaci&amp;oacute;in&amp;rdquo; utilizado anteriormente no es una ordenaci&amp;oacute;n l&amp;oacute;gica sobre una propiedad del conjunto de elemento; este tipo de elementos los veremos m&amp;aacute;s adelante y podr&amp;iacute;an estar catalogados como colecciones especializadas.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;La diferencia principal entre &lt;strong&gt;Stack&lt;/strong&gt; y &lt;strong&gt;Queue&lt;/strong&gt; reside en el orden en el que los elementos son obtenidos. En ambos casos almacenan elementos en estricto orden de llegada y mientras que en la clase Stack responde a &lt;strong&gt;LIFO&lt;/strong&gt; (Last Input First Output) en el caso de la cola responde a &lt;strong&gt;FIFO&lt;/strong&gt; (First Input First Output). Ambas clases derivan de &lt;strong&gt;ICollection&lt;/strong&gt; e &lt;strong&gt;IClonable&lt;/strong&gt; y cada una de ellas utiliza un m&amp;eacute;todo distinto para a&amp;ntilde;adir y quitar un elemento de la colecci&amp;oacute;n. &lt;strong&gt;Push&lt;/strong&gt; y &lt;strong&gt;Pull&lt;/strong&gt; para Stack y &lt;strong&gt;Enqueue&lt;/strong&gt; y &lt;strong&gt;Dequeu&lt;/strong&gt; para Queue.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;var queue = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Queue();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;var stack = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Stack();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;queue.Enqueue(&lt;span style="color:#006080;"&gt;&amp;quot;A&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;queue.Enqueue(&lt;span style="color:#006080;"&gt;&amp;quot;B&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;queue.Enqueue(&lt;span style="color:#006080;"&gt;&amp;quot;C&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;queue.Enqueue(&lt;span style="color:#006080;"&gt;&amp;quot;D&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;stack.Push(&lt;span style="color:#006080;"&gt;&amp;quot;A&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;stack.Push(&lt;span style="color:#006080;"&gt;&amp;quot;B&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;stack.Push(&lt;span style="color:#006080;"&gt;&amp;quot;C&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;stack.Push(&lt;span style="color:#006080;"&gt;&amp;quot;D&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;Console.WriteLine(&lt;span style="color:#006080;"&gt;&amp;quot;Dequeue-ing...&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (var elemento &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; queue)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    Console.WriteLine(elemento.ToString());&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;Console.WriteLine(&lt;span style="color:#006080;"&gt;&amp;quot;Pop-ing...&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (var elemento &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; stack)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    Console.WriteLine(elemento.ToString());&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;//Resultado:&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;// Dequeue-ing...&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;// A&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;// B&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;// C&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;// D&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;// Pop-ing...&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;// D&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;// C&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;// B&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;// A&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Son colecciones principalmente utilizadas, como es obvio, en contextos d&amp;oacute;nde el orden de llegada es altamente importante. A partir de aqu&amp;iacute;, la forma en la que se obtienen los elementos de la colecci&amp;oacute;n es la clave para decidir seleccionar una u otra clase.&lt;/p&gt;
&lt;h2&gt;Colecciones espec&amp;iacute;ficas &lt;/h2&gt;
&lt;p&gt;Otro tipo de agrupamiento para las colecciones espec&amp;iacute;ficas (es decir, las que se extienden m&amp;aacute;s all&amp;aacute; de &lt;strong&gt;ICollection&lt;/strong&gt;) es de colecciones de &lt;strong&gt;acceso por clave o por &amp;iacute;ndice&lt;/strong&gt;. A continuaci&amp;oacute;n veremos el conjunto de colecciones agrupadas por clave (a trav&amp;eacute;s de &lt;strong&gt;IDictionary&lt;/strong&gt;) y posteriormente las que son agrupadas por &amp;iacute;ndice (a trav&amp;eacute;s de &lt;strong&gt;IList&lt;/strong&gt;) y por &amp;uacute;ltimo aquellas colecciones que hacen uso tanto de las caracter&amp;iacute;sticas de &amp;iacute;ndice y de clave.&lt;/p&gt;
&lt;h3&gt;Derivadas de System.Collections.IList&lt;/h3&gt;
&lt;p&gt;En el ejemplo con el que abr&amp;iacute;amos este art&amp;iacute;culo vimos un ejemplo con &lt;strong&gt;System.Array&lt;/strong&gt;, un claro ejemplo de colecci&amp;oacute;n basado en &amp;iacute;ndices, tambi&amp;eacute;n conocido en ingl&amp;eacute;s como zero-based indexed collection. &lt;strong&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/es-es/library/system.collections.arraylist(v=VS.100).aspx"&gt;System.ArrayList&lt;/a&gt;&lt;/strong&gt; es otro claro ejemplo de colecci&amp;oacute;n indexada que surge de la necesidad de poder redimensionar el tama&amp;ntilde;o de una colecci&amp;oacute;n de forma din&amp;aacute;mica, limitaci&amp;oacute;n encontrada en &lt;strong&gt;System.Array&lt;/strong&gt;. De hecho, podr&amp;iacute;a &lt;strong&gt;ArrayList &lt;/strong&gt;ser descrita como un h&amp;iacute;brido entre una colecci&amp;oacute;n y una matriz de elementos ya que los elementos siguen almacen&amp;aacute;ndose en orden de llegada pese a que pueden ser obtenidos mediante el &amp;iacute;ndice relativo de la propia colecci&amp;oacute;n. &lt;/p&gt;
&lt;p&gt;En cuanto a la capacidad, podemos indic&amp;aacute;rsela en el constructor o bien no hacerlo y la propia colecci&amp;oacute;n ir&amp;aacute; redimension&amp;aacute;ndose. Debido al &lt;strong&gt;coste que tiene la operaci&amp;oacute;n de redimensionamiento&lt;/strong&gt;, &lt;strong&gt;ArrayList&lt;/strong&gt; crece en bloques del doble de su capacidad, siendo &lt;strong&gt;4&lt;/strong&gt; su capacidad inicial, si no se indica el tama&amp;ntilde;o por defecto. Esto significa que tras la instanciaci&amp;oacute;n de:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
var arrayList2 = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; ArrayList {20.0d};


&lt;pre&gt;&lt;/pre&gt;
&lt;span style="color:#008000;"&gt;//arrayList2.Capacity = 4&lt;/span&gt;


&lt;pre&gt;&lt;/pre&gt;
//arrayList2.Count = 1


&lt;pre&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;El objeto arrayList poseer&amp;aacute; una capacidad de 4 elementos, tres de ellos null. Tras ir a&amp;ntilde;adiendo m&amp;aacute;s elementos arrayList siempre ir&amp;aacute; creciendo en orden de 4, 8, 16, 32, 64, &amp;hellip; elementos dejando los no utilizados con null. Indentificaremos la capacidad total mediante la propiedad Capacity, siempre multiples de 4, y la cantidad de elementos no null mediante Count.&lt;/p&gt;
&lt;p&gt;Podemos exigir que un objeto &lt;strong&gt;ArrayList&lt;/strong&gt; tenga un tama&amp;ntilde;o fijo predefinido. Sin embargo, es muy com&amp;uacute;n confundir esta limitaci&amp;oacute;n o caracter&amp;iacute;stica con la cantidad de elementos que se le puede pasar por par&amp;aacute;metro en el constructor de la clase ArrayList. Otro error com&amp;uacute;n es indicar una capacidad elevada en previsi&amp;oacute;n de crecimiento. Si es cierto que esto es una buena practica si el numero de elementos a a&amp;ntilde;adir es finalmente inferior a la capacidad inicial, no lo es si el numero de elementos final es superior puesto que el crecimiento de la &lt;strong&gt;ArrayList ser&amp;aacute; multiple a la capacidad inicial&lt;/strong&gt;. Es decir, por ejemplo, el siguiente ejemplo crea un ArrayList con un tama&amp;ntilde;o predefinido de 100 elementos. Por un lado podemos ver como el objeto arrayList acepta 1000 elemento (10 veces m&amp;aacute;s de lo inicialmente previsto) sin ning&amp;uacute;n problema. Sin embargo, tras el bucle podemos observar que la capcidad &amp;ndash;Capacity- (no cantidad &amp;ndash;Count- de elementos) es de 1600 y es debido a que el crecimiento ha sido de 100, 200, 400, 800 y 1600. O sea que &lt;strong&gt;tenemos un ArrayList de 1600 elementos de capacidad y realmente se estan utilizando 1000&lt;/strong&gt;.&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
var arrayList = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; ArrayList(100);


&lt;pre&gt;&lt;/pre&gt;
&lt;span style="color:#0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; 1000; i++)


&lt;pre&gt;&lt;/pre&gt;
arrayList.Add(i);


&lt;pre&gt;&lt;/pre&gt;
&lt;span style="color:#008000;"&gt;//arrayList.Capacity = 1600&lt;/span&gt;


&lt;pre&gt;&lt;/pre&gt;
&lt;span style="color:#008000;"&gt;//arrayList.Count = 1000&lt;/span&gt;


&lt;pre&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Si hacemos la misma interaci&amp;oacute;n sin un tama&amp;ntilde;o predefinido &amp;ndash;es decir con tama&amp;ntilde;o por defecto igual a 4-, la capacidad final ser&amp;aacute; de 1024.&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
var arrayList = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; ArrayList(1);


&lt;pre&gt;&lt;/pre&gt;
&amp;nbsp;


&lt;pre&gt;&lt;/pre&gt;
&lt;span style="color:#0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; 1000; i++)


&lt;pre&gt;&lt;/pre&gt;
arrayList.Add(i);


&lt;pre&gt;&lt;/pre&gt;
&lt;span style="color:#008000;"&gt;//arrayList.Capacity = 1024&lt;/span&gt;


&lt;pre&gt;&lt;/pre&gt;
&lt;span style="color:#008000;"&gt;//arrayList.Count = 1000&lt;/span&gt;


&lt;pre&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Otro error com&amp;uacute;n es confundir tama&amp;ntilde;o predefinido o inicial con tama&amp;ntilde;o fijo. Un ArraList de tama&amp;ntilde;o fijo jam&amp;aacute;s admitir&amp;aacute; la agregaci&amp;oacute;n o eliminaci&amp;oacute;n de elementos, pero si la modificaci&amp;oacute;n. &lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
var arrayList = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; ArrayList { 20.0d };


&lt;pre&gt;&lt;/pre&gt;
var arrayList2 = ArrayList.FixedSize(arrayList);


&lt;pre&gt;&lt;/pre&gt;
arrayList2.Add(145.0d); &lt;span style="color:#008000;"&gt;//NotSupportedException&lt;/span&gt;


&lt;pre&gt;&lt;/pre&gt;
// arrayList2.IsFixedSize = true


&lt;pre&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Identificaremos las ArrayList de tama&amp;ntilde;o fijo mediante la propiedad &lt;strong&gt;IsFixedSize&lt;/strong&gt; y como vemos en el ejemplo la forma de generarlas es a trav&amp;eacute;s de un objeto del tipo ArrayList o IList existente. Por otro lado, &lt;strong&gt;IsReadOnly&lt;/strong&gt; es una propiedad de lectura y escritura con lo que podremos controlar la restricci&amp;oacute;n o no de escritura sobre el conjunto de elementos.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;NOTA: ArrayList esta cayendo en desuso (si no lo ha hecho ya) desde la aparici&amp;oacute;n de las colecciones gen&amp;eacute;ricas.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;La colecci&amp;oacute;n &lt;strong&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/es-es/library/system.collections.specialized.stringcollection(v=VS.100).aspx"&gt;StringCollection&lt;/a&gt;&lt;/strong&gt; forma parte de las colecciones especializadas agrupadas en el espacio de nombres &lt;a target="_blank" href="http://msdn.microsoft.com/es-es/library/system.collections.specialized(v=VS.100).aspx"&gt;System.Collections.Specialized&lt;/a&gt;. &lt;strong&gt;StringCollection&lt;/strong&gt; est&amp;aacute; especialmente optimizada para la manipulaci&amp;oacute;n de elementos del tipo string; es en esencia un ArraList tipado para aceptar &amp;uacute;nicamente cadenas de texto. StringCollection es ideal para la manipulaci&amp;oacute;n de relativamente poca cantidad de datos de tipo string que son frecuentemente actualizados.&lt;/p&gt;
&lt;h3&gt;Derivadas de System.Collections.IDictionary&lt;/h3&gt;
&lt;p&gt;De la misma forma que trat&amp;aacute;vamos &lt;strong&gt;ArrayList&lt;/strong&gt; como &amp;ldquo;tipo primitivo&amp;rdquo; para la implementaci&amp;oacute;n de &lt;strong&gt;IList&lt;/strong&gt;, har&amp;iacute;amos lo mismo para el tipo &lt;strong&gt;SortedList&lt;/strong&gt; con la interfaz &lt;strong&gt;IDictionary&lt;/strong&gt;.La diferencia fundamental es que mientras en ArrayList se almacenan los elemento por orden de &amp;ldquo;llegada&amp;rdquo; en SortedList se almacena una pareja valor/clave y tanto se puede acceder por clave como por &amp;iacute;ndice.&lt;/p&gt;
&lt;p&gt;Internamente, &lt;strong&gt;SortedList mantiene dos arrays&lt;/strong&gt;, uno para el almacenamiento de claves y otro para el almacenamiento de valores la cuales se acceden mediante un objeto de la estructura &lt;strong&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/es-es/library/system.collections.dictionaryentry(v=VS.100).aspx"&gt;DictionaryEntry&lt;/a&gt;&lt;/strong&gt;. Como su propio nombre indica, SortedList mantiene el conjunto de elementos ordenados por clave. La clave puede ordenarse en funci&amp;oacute;n a una implementaci&amp;oacute;n espec&amp;iacute;fica de &lt;strong&gt;IComparer&lt;/strong&gt; o bien mediante la interfaz &lt;strong&gt;IComparable&lt;/strong&gt; que los propios tipos de las claves &amp;ndash; de sus elementos - indican. En el siguiente ejemplo a&amp;ntilde;adimos 4 elementos de tipo string y observamos el resultado. Fij&amp;eacute;monos como el IComparer por defecto es &lt;strong&gt;CaseSensitive&lt;/strong&gt; ya que est&amp;aacute; utilizando la implementaci&amp;oacute;n &lt;strong&gt;IComparable&lt;/strong&gt; derivado de la clase &lt;strong&gt;String&lt;/strong&gt;.&lt;/p&gt;
&lt;div&gt;&amp;nbsp;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;var sortedList = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; SortedList()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                     {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                         {&lt;span style="color:#006080;"&gt;&amp;quot;Z&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;Z&amp;quot;&lt;/span&gt;},&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                         {&lt;span style="color:#006080;"&gt;&amp;quot;A&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;A&amp;quot;&lt;/span&gt;},&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                         {&lt;span style="color:#006080;"&gt;&amp;quot;a&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;a&amp;quot;&lt;/span&gt;},&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                         {&lt;span style="color:#006080;"&gt;&amp;quot;B&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;B&amp;quot;&lt;/span&gt;}&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                     };&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (var elemento &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; sortedList)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    Console.WriteLine(((DictionaryEntry)elemento).Value);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;//Resultado:&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;//a&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;//A&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;//B&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;//Z&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Sin embarago, si utiliz&amp;aacute;ramos un &lt;strong&gt;IComparer&lt;/strong&gt; propio y especificaramos explicitamente que la comparaci&amp;oacute;n sea &lt;strong&gt;Case Insensitive&lt;/strong&gt;, obtendriamos un error ya que no es posible a&amp;ntilde;adir dos elemento con la misma clave al tratar de la misma forma o valor las cadenas &amp;ldquo;a&amp;rdquo; y &amp;ldquo;A&amp;rdquo;:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; CaseInsensitiveComparerSample : IComparer&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; Compare(Object x, Object y)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; ((&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; CaseInsensitiveComparer())&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;            .Compare(y, x));&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#008000;"&gt;//implementaci&amp;oacute;n&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;var sortedList = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; SortedList(&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; CaseInsensitiveComparerSample ())&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                        {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                            {&lt;span style="color:#006080;"&gt;&amp;quot;Z&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;Z&amp;quot;&lt;/span&gt;},&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                            {&lt;span style="color:#006080;"&gt;&amp;quot;A&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;A&amp;quot;&lt;/span&gt;},&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                            &lt;span style="color:#008000;"&gt;// Argument Exception&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                            {&lt;span style="color:#006080;"&gt;&amp;quot;a&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;a&amp;quot;&lt;/span&gt;},&lt;span style="color:#008000;"&gt;// Item has already been added. &lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                            &lt;span style="color:#008000;"&gt;// Key in dictionary: &amp;#39;A&amp;#39;  Key being added: &amp;#39;a&amp;#39;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                            {&lt;span style="color:#006080;"&gt;&amp;quot;B&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;B&amp;quot;&lt;/span&gt;}&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                        }; &lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Otro tipo de colecci&amp;oacute;n basada en &lt;strong&gt;IDictionary&lt;/strong&gt; es &lt;strong&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/es-es/library/system.collections.hashtable(v=VS.100).aspx"&gt;System.Collections.Hashtable&lt;/a&gt;&lt;/strong&gt;. &lt;strong&gt;Hashtable&lt;/strong&gt; implementa tanto &lt;strong&gt;ICollection&lt;/strong&gt; como &lt;strong&gt;IDictionary&lt;/strong&gt; y ha sido ampliamente utilizado como tipo de colecci&amp;oacute;n id&amp;oacute;nea para la gesti&amp;oacute;n de grandes cantidades de elementos debido a su alto rendimiento. Exige que la clave de sus elementos aunque no el valor hash de cada uno de ellos. De hecho, la ordenaci&amp;oacute;n del conjunto de elemento vendr&amp;aacute; dado por &lt;strong&gt;el valor hash&lt;/strong&gt;. &lt;strong&gt;DictionaryEntry&lt;/strong&gt; seguir&amp;aacute; jugando el mismo papel que lo hac&amp;iacute;a con SortedList ya que en ambos casos se almacena un par clave/valor. &lt;/p&gt;
&lt;p&gt;Hablando m&amp;aacute;s espec&amp;iacute;ficamente cada objecto de la colecci&amp;oacute;n Hashtable obtiene el valor hash de la llamada al m&amp;eacute;todo &lt;strong&gt;GetHashCode&lt;/strong&gt;() heredado de &lt;strong&gt;System.Object&lt;/strong&gt; o bien una propia implementaci&amp;oacute;n a trav&amp;eacute;s de la interfaz &lt;strong&gt;IHashCodeProvider&lt;/strong&gt;. Cuando un elemento es agregado &amp;eacute;ste se almacenar&amp;aacute; en un sector de almacenamiento o cubo &amp;ndash;bucket en ingl&amp;eacute;s- de forma que su posterior localizaci&amp;oacute;n ser&amp;aacute; mucho m&amp;aacute;s &amp;oacute;ptima. No importa el valor real del objeto pues cada uno de ellos tendr&amp;aacute; su propio codigo hash y de este modo se reduce considerablemente el n&amp;uacute;mero de comparaciones. As&amp;iacute;, por ejemplo, &lt;strong&gt;Hasthable&lt;/strong&gt; situar&amp;aacute; dos elementos de tipo string con valores &amp;ldquo;&lt;em&gt;picnic&lt;/em&gt;&amp;rdquo; y &amp;ldquo;&lt;em&gt;basket&lt;/em&gt;&amp;rdquo; en distintos cubos o b&amp;uacute;ckets; sin embargo los dos elemento de tipo string con valores &amp;ldquo;&lt;em&gt;stressed&lt;/em&gt;&amp;rdquo; y &amp;ldquo;&lt;em&gt;desserts&lt;/em&gt;&amp;rdquo; probablemente tengan el mismo codigo hash y por tanto los situar&amp;aacute; en un mismo bucket o cubo.&lt;/p&gt;
&lt;p&gt;Realmente, la funcionalidad de un Hashtable es muy similiar al que ofrecen otras colecciones derivadas de IDictionary pero la comprensi&amp;oacute;n de c&amp;oacute;mo se gestiona internamente el almacenamiento a trav&amp;eacute;s de c&amp;oacute;digos hash nos permite entender por un lado porque Hashtable es la colecci&amp;oacute;n que mayor rendimiento otorga y por otro lado las problem&amp;aacute;ticas que pueden generar la coincidencia de c&amp;oacute;digos hash si el algoritmo utilizado no es &amp;oacute;ptimo. &lt;/p&gt;
&lt;p&gt;Un t&amp;iacute;pico ejemplo seria:&lt;/p&gt;
&lt;div&gt;&amp;nbsp;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;var hashtable = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Hashtable&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                    {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                        {&lt;span style="color:#006080;"&gt;&amp;quot;616-000-000&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;Juan M.&amp;quot;&lt;/span&gt;},&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                        {&lt;span style="color:#006080;"&gt;&amp;quot;616-000-100&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;Rafael H.&amp;quot;&lt;/span&gt;},&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                        {&lt;span style="color:#006080;"&gt;&amp;quot;616-200-000&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;Joaquin A.&amp;quot;&lt;/span&gt;},&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                        {&lt;span style="color:#006080;"&gt;&amp;quot;616-200-100&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;Alberto P.&amp;quot;&lt;/span&gt;}&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                    };&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (DictionaryEntry elemento &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; hashtable)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;{&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;    Console.WriteLine(&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;Key: {0} Value:{1}&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;                        elemento.Key, elemento.Value));&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;NOTA: Hablar&amp;eacute; m&amp;aacute;s extensamente sobre el tema de los conflictos en colecciones Hashtable en el siguiente post cuando trate la colecci&amp;oacute;n Dictionary&amp;lt;TKey, TValue&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/es-es/library/system.collections.specialized.stringdictionary(v=VS.100).aspx"&gt;StringDictionary&lt;/a&gt;&lt;/strong&gt;, por su parte, juega el mismo papel que lo hac&amp;iacute;a &lt;strong&gt;StringCollection&lt;/strong&gt;, pero si &amp;eacute;ste &amp;uacute;ltimo era ideal para relativamente poca cantidad de elementos y su acceso es por &amp;iacute;ndice, &lt;strong&gt;StringDictionary&lt;/strong&gt;, al implementar &lt;strong&gt;IDictionary&lt;/strong&gt; es ideal para una mayor cantidad de elementos. En este caso, tambi&amp;eacute;n, se trata de una colecci&amp;oacute;n de elementos tipados ya que &amp;uacute;nicamente se aceptan elementos de tipo String.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Conclusi&amp;oacute;n&lt;/h2&gt;
&lt;p&gt;Unicamente he expuesto las colecciones m&amp;aacute;s utilizadas relativas a las no gen&amp;eacute;ricas que he cre&amp;iacute;do conveniente por propia experiencia exponer. En el siguiente post hablaremos de las colecciones gen&amp;eacute;ricas que presenta el BCL.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=177808" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Visual+C_2300_/default.aspx">Visual C#</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/System.Collections/default.aspx">System.Collections</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/.NET+Framework/default.aspx">.NET Framework</category></item><item><title>[OT] Hadi Hariri y cena aniversario de CatDotNet</title><link>http://geeks.ms/blogs/jmtorres/archive/2010/05/10/ot-hadi-hariri-y-cena-aniversario-de-catdotnet.aspx</link><pubDate>Mon, 10 May 2010 08:33:21 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:176713</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=176713</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2010/05/10/ot-hadi-hariri-y-cena-aniversario-de-catdotnet.aspx#comments</comments><description>&lt;p&gt;Buenas!!&lt;/p&gt;  &lt;p&gt;Comentaros que mañana martes a las 19h tendremos el placer de tener con nostros a Hadi Hariri en la charla mensual de CatDotNet. Además, seguidamente nos desplazaremos a Capellades para celebrar la cena aniversario de CatDotNet dónde nos encontramos anualmente todos la gente de comunidad de la zona de Cataluña. Si estais por la zona, no dudes, en contactarnos!!!&lt;/p&gt;  &lt;p&gt;Lugar?: Sala Ig-Nova Tecnospai. Av. Barcelona núm. 105 (Igualada)&lt;/p&gt;  &lt;p&gt;Hora?: 19h de la tarde&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;iframe height="350" marginheight="0" src="http://maps.google.es/maps?f=q&amp;amp;source=s_q&amp;amp;hl=es&amp;amp;q=Avinguda+de+Barcelona,+105,+08700+Igualada,+Barcelona,+Catalu%C3%B1a&amp;amp;ie=UTF8&amp;amp;cd=8&amp;amp;geocode=FRmEegIdUdUYAA&amp;amp;split=0&amp;amp;sll=40.396764,-3.713379&amp;amp;sspn=7.829737,14.985352&amp;amp;hq=&amp;amp;hnear=Avinguda+de+Barcelona,+105,+08700+Igualada,+Barcelona,+Catalu%C3%B1a&amp;amp;z=16&amp;amp;ll=41.583641,1.627473&amp;amp;output=embed" frameborder="0" width="425" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;  &lt;br /&gt;&lt;small&gt;&lt;a style="text-align:left;color:#0000ff;" href="http://maps.google.es/maps?f=q&amp;amp;source=embed&amp;amp;hl=es&amp;amp;q=Avinguda+de+Barcelona,+105,+08700+Igualada,+Barcelona,+Catalu%C3%B1a&amp;amp;ie=UTF8&amp;amp;cd=8&amp;amp;geocode=FRmEegIdUdUYAA&amp;amp;split=0&amp;amp;sll=40.396764,-3.713379&amp;amp;sspn=7.829737,14.985352&amp;amp;hq=&amp;amp;hnear=Avinguda+de+Barcelona,+105,+08700+Igualada,+Barcelona,+Catalu%C3%B1a&amp;amp;z=16&amp;amp;ll=41.583641,1.627473"&gt;Ver mapa más grande&lt;/a&gt;&lt;/small&gt;   &lt;p&gt; Us hi esperem!!!!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=176713" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Comunidad/default.aspx">Comunidad</category></item><item><title>¡¡Microsoft SQL Server Compact no ha muerto!!</title><link>http://geeks.ms/blogs/jmtorres/archive/2010/04/14/161-161-microsoft-sql-server-compact-no-ha-muerto.aspx</link><pubDate>Wed, 14 Apr 2010 11:48:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:174640</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=174640</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2010/04/14/161-161-microsoft-sql-server-compact-no-ha-muerto.aspx#comments</comments><description>&lt;p align="justify"&gt;&lt;img style="display:inline;margin-left:0px;margin-right:0px;" src="http://itprocommunityguatemala.files.wordpress.com/2009/04/rosa_luto.jpg" width="219" align="left" height="164" alt="" /&gt;Despu&amp;eacute;s del impacto que ha tenido la presentaci&amp;oacute;n del nuevo modelo de desarrollo que traer&amp;aacute; tras de s&amp;iacute; la nueva apuesta de Microsoft para telef&amp;oacute;nos m&amp;oacute;viles con &lt;a href="http://www.windowsphone7series.com/" target="_blank"&gt;Windows Phone 7 Series&lt;/a&gt;&lt;b&gt;&lt;/b&gt;, y despu&amp;eacute;s de que m&amp;aacute;s de uno se haya enfundado el traje de negro y preparado ya los preparativos para &lt;b&gt;el funeral de .NET Compact Framework &lt;/b&gt;he o&amp;iacute;do rumores de algunos desarrolladores que, ante la visible &lt;b&gt;desinformaci&amp;oacute;n de Microsoft &lt;/b&gt;que rodea la aparici&amp;oacute;n &lt;b&gt;WP7S&lt;/b&gt;, han decidido incluir dentro del mismo funeral a &lt;b&gt;Microsoft SQL Server Compact&lt;/b&gt;, y eso me duele ;-)&lt;/p&gt;
&lt;p align="justify"&gt;En primer lugar &lt;b&gt;&lt;span style="font-size:medium;"&gt;.NET Compact Framework NO VA A MORIR &lt;/span&gt;&lt;/b&gt;de la misma forma que no lo va a hacer &lt;b&gt;Windows Mobile 6.5&lt;/b&gt;. Mientras &lt;b&gt;WP7S&lt;/b&gt; se orienta hac&amp;iacute;a un claro p&amp;uacute;blico consumidor/productivo, &lt;b&gt;WinMo 6.5&lt;/b&gt;, por su parte, se quedar&amp;aacute; dando cobertura al importante parque de aplicaciones empresariales/industriales. Microsoft no ha dicho oficialmente lo contrario por lo que cabe esperar tanto el soporte para WiMo 6.5 y .NET Compact Framework. &lt;/p&gt;
&lt;h2&gt;Microsoft SQL Server Compact 3.5 y Visual Studio .NET 2010&lt;/h2&gt;
&lt;p align="justify"&gt;Con SQL Server Compact 3.1 Microsoft present&amp;oacute; una caracter&amp;iacute;sticas important&amp;iacute;sima a la menor de las ediciones de SQL Server al &lt;b&gt;&lt;span style="text-decoration:underline;"&gt;hacerla multiplataforma&lt;/span&gt;&lt;/b&gt;. Esto significa que desde entonces SQL Server Compact no se liga &amp;uacute;nicamente a entornos de desarrollo para dispositivos m&amp;oacute;viles sino para lo que se denomina , aplicaciones m&amp;oacute;viles desarrolladas con &lt;b&gt;WPF&lt;/b&gt; o &lt;b&gt;Windows Forms &lt;/b&gt;e &lt;b&gt;&lt;a href="http://erikej.blogspot.com/2010/02/access-local-sql-compact-database-from.html" target="_blank"&gt;incluso desde Silverlight&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;Por lo tanto, y siguiendo la costumbre, &lt;b&gt;Visual Studio 2010 .NET&lt;/b&gt; instala &lt;a target="_blank" href="http://blogs.msdn.com/sqlservercompact/archive/2010/04/14/microsoft-sql-server-compact-3-5-with-service-pack-2-released-with-visual-studio-2010-and-on-the-web.aspx"&gt;&lt;b&gt;MS SQL Server Compact SP2&lt;/b&gt; con las &amp;uacute;ltimas caracter&amp;iacute;sitcas &lt;/a&gt;en mayoria relacionadas con &lt;a href="http://josemigueltorres.net/boresight/?tag=microsoft-sync-framework" target="_blank"&gt;MS Sync Framework&lt;/a&gt;.&amp;nbsp; &lt;/p&gt;
&lt;h2&gt;Por qu&amp;eacute; Microsoft SQL Server Compact no debe morir&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Porque SQL Server Compact en una &amp;ndash;la &amp;uacute;nica en Microsoft- &lt;b&gt;base de datos in-process&lt;/b&gt;. &lt;/li&gt;
&lt;li&gt;Porque SQL Server Compact es especialmente &amp;uacute;til en aplicaciones del tipo Smart Client debido a su alta integraci&amp;oacute;n en entornos de sincronizaci&amp;oacute;n o lo que se denomina base de datos cach&amp;eacute;. &lt;/li&gt;
&lt;li&gt;Porque SQL Server Compact aporta una facilidad de despliegue que adem&amp;aacute;s es compatible con &lt;b&gt;ClickOnce&lt;/b&gt;. &lt;/li&gt;
&lt;li&gt;Porque hay escenarios en los que SQL Server Express no es el SGBD adecuado. En otros escenario no lo es SQL Server Compact.&lt;b&gt; SQL Server Express NO es un rival de Compact&lt;/b&gt;. &lt;/li&gt;
&lt;li&gt;Porque Microsoft esta adoptando SQL Server Compact como SGBD embebido. &lt;/li&gt;
&lt;li&gt;Y por &amp;uacute;ltimo y aunque sea el m&amp;aacute;s trivial y menos importante, pq el &lt;a href="http://geeks.ms/blogs/jmtorres/archive/2008/08/04/mi-primer-libro-sql-server-compact-2008.aspx" target="_blank"&gt;Bandolero se pas&amp;oacute; m&amp;aacute;s de un a&amp;ntilde;o&lt;/a&gt; profundizando en el producto y materializandolo en loque fue &lt;a href="http://shop.campusmvp.com/Product-SQL-Server-Compact-2008-SP1-Referencia-Completa_34.aspx" target="_blank"&gt;su primer libro&lt;/a&gt;. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Conlusi&amp;oacute;n&lt;/h2&gt;
&lt;p&gt;En definitiva, SQL Server Compact 3.5 SP2 seguir&amp;aacute; siendo una opci&amp;oacute;n v&amp;aacute;lida ante cualquier nuevo desarrollo brindando todas las caracter&amp;iacute;sticas anteriormente numeradas y que la hacen realmente &amp;uacute;nica.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=174640" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Windows+Mobile/default.aspx">Windows Mobile</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/SQL+Server+Compact/default.aspx">SQL Server Compact</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/.NET+Compact+Framework/default.aspx">.NET Compact Framework</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Windows+Phone+7+Series/default.aspx">Windows Phone 7 Series</category></item><item><title>[CatDotNet] Dices tu de nServiceBus…</title><link>http://geeks.ms/blogs/jmtorres/archive/2010/02/24/catdotnet-dices-tu-de-nservicebus.aspx</link><pubDate>Wed, 24 Feb 2010 22:33:36 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:168121</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=168121</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2010/02/24/catdotnet-dices-tu-de-nservicebus.aspx#comments</comments><description>&lt;p align="justify"&gt;Buenas!! Pues el próximo viernes 26 de febrero tendremos el placer de contar en Igualada con &lt;strong&gt;Sergio Bermudez &lt;/strong&gt;quién nos presentará lo bueno y lo malo –si es que lo hay- de &lt;strong&gt;&lt;a href="http://www.nservicebus.com"&gt;nServiceBus&lt;/a&gt;&lt;/strong&gt; del amigo &lt;strong&gt;Udi Dahan, y &lt;/strong&gt;cuyo pretexto utilizaremos para tomar, a posteriori, unos cacharros entre amigos y saber más sobre los &lt;strong&gt;ESB &lt;/strong&gt;(ver foto).&lt;/p&gt;  &lt;p&gt;&lt;img style="display:block;float:none;margin-left:auto;margin-right:auto;" src="http://carbon111.com/brew/redhook_esb.jpg" width="256" height="382" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;Así que si estás por las cercanías, ¡¡te esperamos!!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/CatDotNet_5F00_pequec3b1a_5F00_17530497.jpg"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="CatDotNet_peque%c3%b1a" border="0" alt="CatDotNet_peque%c3%b1a" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/CatDotNet_5F00_pequec3b1a_5F00_thumb_5F00_15A238C3.jpg" width="162" height="59" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=168121" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Comunidad/default.aspx">Comunidad</category></item><item><title>Virtualización de Servicios con Managed Services Engines</title><link>http://geeks.ms/blogs/jmtorres/archive/2010/02/04/virtualizaci-243-n-de-servicios-con-managed-services-engines.aspx</link><pubDate>Thu, 04 Feb 2010 07:57:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:166630</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=166630</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2010/02/04/virtualizaci-243-n-de-servicios-con-managed-services-engines.aspx#comments</comments><description>&lt;p align="justify"&gt;Desde mis primeras incursiones en el desarrollo de Servicios empresariales, b&amp;aacute;sicamente desde la aparici&amp;oacute;n de las primeras betas de &lt;strong&gt;WCF&lt;/strong&gt;, ha habido un miedo esc&amp;eacute;nico que me ha atormentado y es la programaci&amp;oacute;n d&amp;eacute;spota e incontrolada de servicios, servicios y m&amp;aacute;s servicios, lo que deriva en la producci&amp;oacute;n de 300 servicios, con 300 enlaces distintos (no m&amp;aacute;s de 10 comunes), en 50 endpoints y cuyo valor operativo era equivalente a 50 servicios bien dise&amp;ntilde;ados y gobernados.&amp;nbsp; No conceb&amp;iacute;a una arquitectura s&amp;oacute;lida de servicios sin una &lt;em&gt;&amp;ldquo;torre de control&lt;/em&gt;&amp;rdquo; o una &amp;ldquo;&lt;em&gt;cabina de mando&lt;/em&gt;&amp;rdquo; desde d&amp;oacute;nde poder ver, gestionar y modificar nuestros servicios. &lt;/p&gt;
&lt;p align="justify"&gt;M&amp;aacute;s adelante tuve la oportunidad de trabajar en una arquitectura &lt;strong&gt;SOA&lt;/strong&gt; desarrollada en &lt;strong&gt;J2EE&lt;/strong&gt;, dirigida por un ESB de &lt;strong&gt;Oracle&lt;/strong&gt; y gestionada con herramientas de gobernabilidad SOA, que manejaban m&amp;aacute;s de un centenar de servicios (&lt;em&gt;proxy&lt;/em&gt; y &lt;em&gt;legacy&lt;/em&gt;) y d&amp;oacute;nde la publicaci&amp;oacute;n y consumo de dichos servicios se realizaban a trav&amp;eacute;s de estrictas normas protocolarias (seguridad, documentaci&amp;oacute;n,&amp;hellip;).&lt;/p&gt;
&lt;p align="justify"&gt;Ahora vuelvo, de nuevo, a tener la misma necesidad, dise&amp;ntilde;ar una infraestructura de servicios y cuando hablo de infraestructura hablo de ese tipo de herramientas fundamentales para el control de todos y cada uno de los servicios. Pero ahora (en realidad hace ya un tiempo que existe) me encontr&amp;eacute; con un software, bajo licencia&amp;nbsp; &lt;em&gt;Microsoft Public License&lt;/em&gt; (Ms-PL) y c&amp;oacute;digo abierto, que adopta de forma pr&amp;aacute;ctica la idea de Virtualizaci&amp;oacute;n de Servicios, llamado &lt;strong&gt;&lt;a href="http://www.codeplex.com/servicesengine"&gt;Managed Services Engine&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;h1 align="justify"&gt;Virtualizaci&amp;oacute;n de Servicios&lt;/h1&gt;
&lt;p align="justify"&gt;La idea b&amp;aacute;sica del &lt;strong&gt;patr&amp;oacute;n de Virtualizaci&amp;oacute;n de Servicios&lt;/strong&gt; es el de aislar la complejidad de los servicios expuestos del cliente que los consume ya que&amp;nbsp; tras cada servicio se alberga una gran cantidad de aspectos tales como las localizaciones de los endpoints, las configuraciones de los enlaces, la aplicaci&amp;oacute;n de pol&amp;iacute;ticas, etc. Adem&amp;aacute;s muchas de las adopciones SOA a la practica no ofrecen soluciones sobre versionado de servicios, aplicaci&amp;oacute;n de pol&amp;iacute;ticas de seguridad o cambios operativos sin necesidad volver a codificar el servicio as&amp;iacute; como el cumplimiento del &lt;strong&gt;&lt;a href="http://es.wikipedia.org/wiki/Acuerdo_de_nivel_de_servicio"&gt;SLA&lt;/a&gt;&lt;/strong&gt; entre el proveedor &amp;ndash;nosotros- y el cliente.&lt;/p&gt;
&lt;p align="justify"&gt;Aparece la idea de &lt;strong&gt;Servicio Intermediario&lt;/strong&gt; que desacopla el cliente de la implementaci&amp;oacute;n del servicio. Como tal, podemos ofrece varios servicios virtuales de una misma implementaci&amp;oacute;n para, por ejemplo, utilizarlo en distintos escenarios. Es aqu&amp;iacute; d&amp;oacute;nde encontramos la clave de la virtualizaci&amp;oacute;n, en el servicio intermediario, pues todas las llamadas se realizaran a trav&amp;eacute;s de este y podremos modificar su comportamiento sin comprometer los modelos del servicio.&lt;/p&gt;
&lt;p align="justify"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 align="justify"&gt;Managed Services Engine&lt;/h1&gt;
&lt;p align="justify"&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/soa/solutions/soi.aspx"&gt;Microsoft Services SOA Infraestructure&lt;/a&gt;&lt;/strong&gt; ofrece una soluci&amp;oacute;n de virtualizaci&amp;oacute;n de servicios a trav&amp;eacute;s de &lt;strong&gt;Managed Services Engine (MSE&lt;/strong&gt;). Como cabe esperar, MSE est&amp;aacute; basado en la plataforma &lt;strong&gt;Windows&lt;/strong&gt;, esto es, &lt;strong&gt;Windows Server 2003/2008&lt;/strong&gt;, &lt;strong&gt;SQL Server 2005/2008&lt;/strong&gt; y &lt;strong&gt;.NET Framework 3.5&lt;/strong&gt;, especialmente con &lt;strong&gt;Windows Communication Foundation&lt;/strong&gt; para la interceptaci&amp;oacute;n de comunicaciones entre servicios virtuales y reales.&lt;/p&gt;
&lt;p align="justify"&gt;MSE puede integrarse tanto con &lt;strong&gt;MS Biztalk Server 2006 R2 / 2009 &lt;/strong&gt;para proporcionar capacidades adicionales tales como la monitorizaci&amp;oacute;n de las actividades de negocio (BAM), el Business Rules Engine o el ESB Toolkit, entre otros. Adem&amp;aacute;s tambi&amp;eacute;n podemos utilizar los servicios &lt;strong&gt;Azure&lt;/strong&gt; a trav&amp;eacute;s de Azure AppFabric, especialmente con &lt;strong&gt;.NET Service Bus&lt;/strong&gt;.&lt;/p&gt;
&lt;p align="justify"&gt;&lt;img height="276" width="362" src="http://i.msdn.microsoft.com/dd727511.fig11_L(en-us).gif" style="display:inline;margin-left:0px;margin-right:0px;" alt="" /&gt;&lt;/p&gt;
&lt;p align="justify"&gt;MSE consiste, b&amp;aacute;sicamente, en tres componentes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div align="justify"&gt;&lt;em&gt;Messenger&lt;/em&gt;: proporciona la normalizaci&amp;oacute;n del mensaje de entrada a trav&amp;eacute;s de los servicios virtuales. Este componente soporta adem&amp;aacute;s la aplicaci&amp;oacute;n de pol&amp;iacute;ticas (de transformaci&amp;oacute;n por ejemplo, tanto de peticiones como de respuestas) as&amp;iacute; como el mapeo de protocolos.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div align="justify"&gt;&lt;em&gt;Broker&lt;/em&gt;: este componente obtiene el mensaje normalizado y lo reconvierte a la operaci&amp;oacute;n (es decir la implementaci&amp;oacute;n de un m&amp;eacute;todo del servicio) y su respectiva versi&amp;oacute;n (pues podemos tener m&amp;aacute;s de una operaci&amp;oacute;n con distintas versiones).&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div align="justify"&gt;&lt;em&gt;Dispatcher&lt;/em&gt;: una vez se tiene el mensaje y la operaci&amp;oacute;n pertinente, dispatcher invoca el m&amp;eacute;todo del servicio y se transmite dicho mensaje.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p align="justify"&gt;&lt;img height="301" width="459" src="http://i.msdn.microsoft.com/dd727511.fig02_L(ja-jp).gif" alt="" /&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Recalcar que estos tres componentes est&amp;aacute;n &lt;strong&gt;totalmente desacoplados&lt;/strong&gt; unos de otros con lo que podr&amp;iacute;amos distribuirlos de forma que obtendr&amp;iacute;amos una gran cantidad de tipolog&amp;iacute;as del sistema. Todo esto es gracias a la catalogo del servicio (&lt;strong&gt;Service Catalog&lt;/strong&gt;), tambi&amp;eacute;n conocido como repositorio de metadata o simplemente repository o repositorio, ya que contiene todos los modelos de los servicios que hospeda el runtime del MSE &amp;ndash;incorpora asistentes para la importaci&amp;oacute;n de servicios a trav&amp;eacute;s del WSDL y otros mecanismos para servicios POX o REST-. Como dije anteriormente, MSE contiene una implementaci&amp;oacute;n de WCF as&amp;iacute; que es f&amp;aacute;cil intuir que la comunicaci&amp;oacute;n entre ellos se realizan a trav&amp;eacute;s de &lt;strong&gt;canales de mensajer&amp;iacute;a&lt;/strong&gt;. El repositorio, por &amp;uacute;ltimo, utiliza una base de datos &lt;strong&gt;SQL Server &lt;/strong&gt;y la informaci&amp;oacute;n puede ser publicada en un &lt;strong&gt;registry &lt;/strong&gt;externo UDDI 2.0/3.0. &lt;/p&gt;
&lt;p align="justify"&gt;Por &amp;uacute;ltimo, MSE contiene una interfaz para la administraci&amp;oacute;n de los servicios &amp;ndash;&lt;strong&gt;MSE Model Viewer&lt;/strong&gt;- as&amp;iacute; como una herramienta de test &amp;ndash;&lt;strong&gt;MSE Universal Service Tester&lt;/strong&gt;-.&lt;/p&gt;
&lt;p align="justify"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_786F9041.png"&gt;&lt;img height="175" width="244" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_6C3DF04D.png" alt="image" border="0" title="image" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="justify"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_180E443D.png"&gt;&lt;img height="244" width="244" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_43726537.png" alt="image" border="0" title="image" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="justify"&gt;En pr&amp;oacute;ximos posts hablar&amp;eacute; de las diferentes posibilidades que ofrece MSE desde el punto del vista del rol (developer, IT, architect,&amp;hellip;) y como familiarizarse MSE.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=166630" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Managed+Services+Engine/default.aspx">Managed Services Engine</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/SOA/default.aspx">SOA</category></item><item><title>[CatDotNet] Eduard Tomàs hablando sobre ASP.NET MVC en Igualada? Comorrr?</title><link>http://geeks.ms/blogs/jmtorres/archive/2010/01/26/catdotnet-eduard-tom-224-s-hablando-sobre-asp-net-mvc-en-igualada-comorrr.aspx</link><pubDate>Tue, 26 Jan 2010 15:11:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:165968</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=165968</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2010/01/26/catdotnet-eduard-tom-224-s-hablando-sobre-asp-net-mvc-en-igualada-comorrr.aspx#comments</comments><description>&lt;p&gt;Pues s&amp;iacute;, &lt;strong&gt;&lt;a target="_self" href="http://geeks.ms/blogs/etomas"&gt;Eduard Tom&amp;agrave;s&lt;/a&gt;&lt;/strong&gt;,&amp;nbsp;habitual y conocido de&lt;strong&gt; geeks.ms&lt;/strong&gt; y de &lt;strong&gt;&lt;a href="http://www.catdotnet.org"&gt;CatDotNet&lt;/a&gt;&amp;nbsp;&lt;/strong&gt;as&amp;iacute; como en presentaciones &lt;strong&gt;MSDN de Microsoft Ib&amp;eacute;rica&lt;/strong&gt; , nos presenta este viernes en &lt;strong&gt;Igualada&lt;/strong&gt; las bondades de ASP.NET MVC. &lt;/p&gt;
&lt;p&gt;Si est&amp;aacute;is por la zona no dud&amp;eacute;is en asistir!!!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lugar&lt;/strong&gt;: Sala&amp;nbsp;Ig-Nova Tecnospai. Av. Barcelona n&amp;uacute;m. 105 (Igualada) a las 19h.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;iframe scrolling="no" marginwidth="0" width="425" frameborder="0" src="http://maps.google.es/maps?f=q&amp;amp;source=s_q&amp;amp;hl=es&amp;amp;geocode=&amp;amp;q=Av.+Barcelona,+105,+igualada&amp;amp;sll=40.396764,-3.713379&amp;amp;sspn=12.008722,28.45459&amp;amp;ie=UTF8&amp;amp;hq=&amp;amp;hnear=Avinguda+de+Barcelona,+105,+08700+Igualada,+Barcelona,+Catalu%C3%B1a&amp;amp;ll=41.592723,1.631641&amp;amp;spn=0.005762,0.013894&amp;amp;z=14&amp;amp;output=embed" marginheight="0" height="350"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;small&gt;&lt;a href="http://maps.google.es/maps?f=q&amp;amp;source=embed&amp;amp;hl=es&amp;amp;geocode=&amp;amp;q=Av.+Barcelona,+105,+igualada&amp;amp;sll=40.396764,-3.713379&amp;amp;sspn=12.008722,28.45459&amp;amp;ie=UTF8&amp;amp;hq=&amp;amp;hnear=Avinguda+de+Barcelona,+105,+08700+Igualada,+Barcelona,+Catalu%C3%B1a&amp;amp;ll=41.592723,1.631641&amp;amp;spn=0.005762,0.013894&amp;amp;z=14" style="color:#0000FF;text-align:left;"&gt;Ver mapa m&amp;aacute;s grande&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=165968" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Comunidad/default.aspx">Comunidad</category></item><item><title>Inicialización con System.Lazy&lt;T&gt; en .NET Framework 4.0</title><link>http://geeks.ms/blogs/jmtorres/archive/2010/01/21/inicializaci-243-n-con-system-lazy-lt-t-gt-en-net-framework-4-0.aspx</link><pubDate>Thu, 21 Jan 2010 12:11:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:165631</guid><dc:creator>José Miguel Torres</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/jmtorres/rsscomments.aspx?PostID=165631</wfw:commentRss><comments>http://geeks.ms/blogs/jmtorres/archive/2010/01/21/inicializaci-243-n-con-system-lazy-lt-t-gt-en-net-framework-4-0.aspx#comments</comments><description>&lt;p align="justify"&gt;Una de las novedades de .NET Framework 4.0 es la presentaci&amp;oacute;n de la clase &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/dd642331(VS.100).aspx"&gt;System.Lazy&amp;lt;T&amp;gt;&lt;/a&gt;. En programaci&amp;oacute;n, una &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Lazy_initialization"&gt;inicializaci&amp;oacute;n Lazy&lt;/a&gt; (el t&amp;eacute;rmino &lt;strong&gt;Lazy&lt;/strong&gt; significa, literalmente, &lt;strong&gt;gandul&lt;/strong&gt; o &lt;strong&gt;retardado&lt;/strong&gt;) es un m&amp;eacute;todo de inicializaci&amp;oacute;n que permite que el objeto no se instancie hasta que se llame por primera vez, es decir hasta que sea utilizado. En el ciclo de vida de una aplicaci&amp;oacute;n, los m&amp;eacute;todos y propiedades de una clase que componen existen, es decir se instancian en memoria y permanecen ah&amp;iacute; desde la creaci&amp;oacute;n&amp;nbsp; hasta que la destrucci&amp;oacute;n de la clase.&lt;/p&gt;
&lt;p align="justify"&gt;Una clase &lt;strong&gt;Customer&lt;/strong&gt; d&amp;oacute;nde el constructor carga una lista gen&amp;eacute;rica de &lt;strong&gt;Order&lt;/strong&gt; &amp;ndash;inicializa un objecto &lt;strong&gt;List&amp;lt;Order&amp;gt;&lt;/strong&gt; &amp;ndash; &amp;eacute;ste permanece en memoria pese a que incluso es posible que ni siquiera lo necesitemos. Hasta &lt;strong&gt;.NET Framework 4.0&lt;/strong&gt; la implantaci&amp;oacute;n de este tipo de inicializaciones se realiza mediante programaci&amp;oacute;n retrasando la inicializaci&amp;oacute;n de un objeto hasta que realmente se necesitara; en el caso de la clase &lt;strong&gt;Customer&lt;/strong&gt;, por ejemplo, instanciar&amp;iacute;amos el objeto&lt;strong&gt; List&amp;lt;Order&amp;gt;&lt;/strong&gt; en un m&amp;eacute;todo &lt;strong&gt;LoadOrders()&lt;/strong&gt; o &lt;strong&gt;GetOrders(),&lt;/strong&gt; por ejemplo. En el caso de &lt;strong&gt;multithreading&lt;/strong&gt;, la cosa se complica a&amp;uacute;n m&amp;aacute;s y a veces el planteamiento o dise&amp;ntilde;o de la clase no es suficiente.&lt;/p&gt;
&lt;p align="justify"&gt;Como novedad esta caracter&amp;iacute;stica ya forma parte en .NET Framework 4.0 a trav&amp;eacute;s de &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/dd642331(VS.100).aspx"&gt;System.Lazy&amp;lt;T&amp;gt;&lt;/a&gt;&lt;strong&gt;&lt;/strong&gt; y aporta soporte &lt;strong&gt;Thread-Safety&lt;/strong&gt; y una pol&amp;iacute;tica de propagaci&amp;oacute;n de excepciones consistente para dar soporte al &lt;strong&gt;multithreading.&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p align="justify"&gt;A partir de ahora nos olvidaremos de las t&amp;eacute;cnicas anteriores y utilizaremos &lt;strong&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/dd642331(VS.100).aspx"&gt;System.Lazy&amp;lt;T&amp;gt;&lt;/a&gt;&lt;/strong&gt; para inicializaciones perezosas. Veamos un ejemplo: &lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Main(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;[] args)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     Lazy&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt; cadena = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Lazy&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt;(&lt;span style="color:#0000ff;"&gt;delegate&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;                                                 {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;                                                     &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#006080;"&gt;&amp;quot;Ejemplo Lazy&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;                                                 });&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;     Console.WriteLine(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;isValueCreated: {0}&amp;quot;&lt;/span&gt;, cadena.IsValueCreated));&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//podemos ejecutar cualquier acci&amp;oacute;n y no se ejecutar&amp;aacute; hasta...&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;     Console.WriteLine(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;Value calling: {0}&amp;quot;&lt;/span&gt;, cadena.Value));&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//... que no llamemos al valor&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;     Console.WriteLine(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;isValueCreated: {0}&amp;quot;&lt;/span&gt;, cadena.IsValueCreated));&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;     Console.Read();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;El constructor de &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/dd642331(VS.100).aspx"&gt;System.Lazy&amp;lt;T&amp;gt;&lt;/a&gt; soporta las siguientes sobrecargas:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; Lazy();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; Lazy(Func&amp;lt;T&amp;gt; valueFactory);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; Lazy(&lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; isThreadSafe);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; Lazy(Func&amp;lt;T&amp;gt; valueFactory, &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; isThreadSafe);&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;El par&amp;aacute;metro &lt;strong&gt;isThreadSafe&lt;/strong&gt; se establecer&amp;aacute; a true cuando necesitemos utilizar el objeto de forma concurrente por multiples threads, con valor predeterminado a false.&lt;/p&gt;
&lt;p&gt;El par&amp;aacute;metro &lt;strong&gt;valueFactory&lt;/strong&gt; es un delegado del tipo&lt;strong&gt; Func&amp;lt;T&amp;gt;&lt;/strong&gt; y ser&amp;aacute; el encargado de inicializar el valor del objeto &lt;strong&gt;Lazy&lt;/strong&gt;. Un ejemplo, adem&amp;aacute;s del expuesto en el ejemplo anterior, podr&amp;iacute;a ser:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Order {}&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; OrderDb&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; List&amp;lt;Order&amp;gt; GetOrdersBy(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; idCustomer)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;     {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; List&amp;lt;Order&amp;gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;                    {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;                        &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Order(),&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;                        &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Order(),&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;                        &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Order()&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;                    };&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;     }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt; }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Customer&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  17:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  18:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; Lazy&amp;lt;List&amp;lt;Order&amp;gt;&amp;gt; _orders;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  19:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  20:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; Customer(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; id)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  21:&lt;/span&gt;     {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  22:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;//inicializaci&amp;oacute;n Lazy&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  23:&lt;/span&gt;         _orders =&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Lazy&amp;lt;List&amp;lt;Order&amp;gt;&amp;gt;(() =&amp;gt;  OrderDb.GetOrdersBy(id) );&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  24:&lt;/span&gt;     }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  25:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Con el siguiente programa de consola:&lt;/p&gt;
&lt;div&gt;
&lt;div style="line-height:12pt;background-color:#f4f4f4;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Program&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Main(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;[] args)&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     {&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;         Customer customer = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Customer(&lt;span style="color:#006080;"&gt;&amp;quot;10&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;//pese a que customer se ha incializado la Lista de Orders a&amp;uacute;n no:&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;         Console.WriteLine(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;isValueCreated: {0}&amp;quot;&lt;/span&gt;, customer._orders.IsValueCreated));&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;//Solicitamos las ordenes&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;         Console.WriteLine(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;calling Value.Count: {0}&amp;quot;&lt;/span&gt;, customer._orders.Value.Count));&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;         &lt;span style="color:#008000;"&gt;//Ahora si se han instanciado&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;         Console.WriteLine(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;isValueCreated: {0}&amp;quot;&lt;/span&gt;, customer._orders.IsValueCreated));&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;         Console.Read();&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:white;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;     }&lt;/pre&gt;
&lt;pre style="line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;color:black;font-size:8pt;overflow:visible;border-style:none;padding:0px;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Cuya salida ser&amp;aacute;:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_2534F580.png"&gt;&lt;img height="152" width="407" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/jmtorres/image_5F00_thumb_5F00_49E60CF7.png" alt="image" border="0" title="image" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Es importante tener en mente este tipo de inicializaciones sobre todo en procesos de mucho consumo de recursos, por ejemplo objetos de la capa de datos que almacenan datos binarios &amp;ndash; imagen, video,-&amp;nbsp; y que muchas veces no necesitamos que consuman memoria si no se van a utilizar. Como este ejemplo, muchos m&amp;aacute;s&amp;hellip;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=165631" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Visual+C_2300_/default.aspx">Visual C#</category><category domain="http://geeks.ms/blogs/jmtorres/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category></item></channel></rss>