<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.com/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 blog de Lluis Franco</title><link>http://msmvps.com/blogs/lfranco/default.aspx</link><description>VB dotNET &amp;amp; more...</description><dc:language>en</dc:language><generator>CommunityServer 2008 SP1 (Build: 30619.63)</generator><item><title>MVP Open Day 2008 - Game over</title><link>http://msmvps.com/blogs/lfranco/archive/2008/10/05/mvp-open-day-2008-game-over.aspx</link><pubDate>Sun, 05 Oct 2008 13:17:52 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1649778</guid><dc:creator>lfranco</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lfranco/rsscomments.aspx?PostID=1649778</wfw:commentRss><comments>http://msmvps.com/blogs/lfranco/archive/2008/10/05/mvp-open-day-2008-game-over.aspx#comments</comments><description>&lt;p&gt;Otra vez en el tren de vuelta a casa. No puedo dejar de experimentar una sensación de &lt;em&gt;deja vu&lt;/em&gt;, como cada vez que viajo a Madrid en busca de aquellos que son como yo. Entenderme, no me considero un bicho raro ni mucho menos, lo que sucede es que vivo en un país de apenas 60.000 habitantes, un número que apenas llenaría la mitad de un estadio de fútbol moderno, y que la mayoría de pueblos grandes o ciudades pequeñas de España sobrepasan de largo. Joer, si Cuenca (con todo el respeto) tiene más habitantes :-)&lt;/p&gt; &lt;p&gt;Y claro, los números salen solos: De toda esta población hay poca gente del mundo de desarrollo de software, y menos todavía que tenga la misma pasión por el desarrollo que puedo tener yo. &lt;em&gt;Sólo un pequeño pueblo de irreductibles galos resiste ahora y siempre al invasor&lt;/em&gt;. Bueno, no es exactamente así, pero seguro que me entendéis :-P. Me estoy refiriendo a que gracias a la gente del grupo de usuarios de &lt;a href="http://www.andorradotnet.com"&gt;andorradotnet&lt;/a&gt;, que comparte mi misma pasión por la plataforma .NET se me hace más llevadero el estar tan desconectado (físicamente, que no realmente) de otros profesionales del tema.&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/MVPOpenDay2008Gameover_11021/DSC02226.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="154" alt="DSC02226" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/MVPOpenDay2008Gameover_11021/DSC02226_thumb.jpg" width="204" border="0" /&gt;&lt;/a&gt; &lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/MVPOpenDay2008Gameover_11021/DSC02229.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="154" alt="DSC02229" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/MVPOpenDay2008Gameover_11021/DSC02229_thumb.jpg" width="204" border="0" /&gt;&lt;/a&gt; &lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/MVPOpenDay2008Gameover_11021/DSC02231.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="154" alt="DSC02231" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/MVPOpenDay2008Gameover_11021/DSC02231_thumb.jpg" width="204" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;De este modo cuando voy a Madrid un par de veces al año, a uno de estos eventos en los que hay un nivelazo técnico importante, me hace disfrutar cada momento como un enano. Te pones a charlar con cualquiera sobre sobre arquitectura, características de nuestros lenguajes favoritos, favoritismos y manías que todos tenemos en nuestro trabajo, etc. Y como encima lo puedes hacer todo delante de una cerveza, hace que te sientas en el paraíso... Porque de eso se trata, somos tan freaks que cuando nos vamos de fiesta a tomar unas copas terminamos hablando de ciertas cosas que hacen que las mesas de al lado te miren con cara de &amp;quot;de dónde se han caído estos tíos&amp;quot;. Eso si, lo pasamos como enanos, jejeje...&lt;/p&gt; &lt;p&gt;Pero no me quiero ir por las ramas, que esto de estar en el tren sin wifi, y con dos horas por delante puede hacer que se me valla la olla un rato. De hecho este post es para comentar lo requetebien que lo he pasado en el MVP Open Day de este año.&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/MVPOpenDay2008Gameover_11021/DSC02239.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="154" alt="DSC02239" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/MVPOpenDay2008Gameover_11021/DSC02239_thumb.jpg" width="204" border="0" /&gt;&lt;/a&gt; &lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/MVPOpenDay2008Gameover_11021/DSC02240.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="154" alt="DSC02240" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/MVPOpenDay2008Gameover_11021/DSC02240_thumb.jpg" width="204" border="0" /&gt;&lt;/a&gt; &lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/MVPOpenDay2008Gameover_11021/DSC02243.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="154" alt="DSC02243" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/MVPOpenDay2008Gameover_11021/DSC02243_thumb.jpg" width="204" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Hemos tenido de todo: Sesiones técnicas de las buenas, contacto directo con profesionales de todas las áreas de Microsoft (siempre tienes alguna pregunta para un experto en SQL Server, de Server System, etc.), te encuentras con viejos amigos y haces de nuevos, conoces gente nueva interesante. También saludas a la gente de la casa que ya conoces desde hace años, sales a tomar algo, acabas en la barra de un bar con dos (o tres) copas de más discutiendo de buen rollo con un colega acerca de si en este caso es mejor aplicar herencia o implementar interfaces, y vuelves al hotel con unas risas y habiendo aprendido un par de cosas.&lt;/p&gt; &lt;p&gt;Espero tener tiempo para ir desgranando algunas de las cosas que hemos visto en esta jornada, de momento os dejo con algunos de los momentos más interesantes de este evento. Ahora voy a seguir preparando los últimos detalles del próximo evento de &lt;a href="http://www.andorradotnet.com"&gt;andorradotnet&lt;/a&gt; dentro de 10 días.&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/MVPOpenDay2008Gameover_11021/DSC02259.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="154" alt="DSC02259" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/MVPOpenDay2008Gameover_11021/DSC02259_thumb.jpg" width="204" border="0" /&gt;&lt;/a&gt; &lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/MVPOpenDay2008Gameover_11021/DSC02256.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="154" alt="DSC02256" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/MVPOpenDay2008Gameover_11021/DSC02256_thumb.jpg" width="204" border="0" /&gt;&lt;/a&gt; &lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/MVPOpenDay2008Gameover_11021/DSC02260.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="154" alt="DSC02260" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/MVPOpenDay2008Gameover_11021/DSC02260_thumb.jpg" width="204" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Compañeros: Espero no tener que esperar otro año para veros de nuevo. Así que os amenazo con montar algún otro evento en &lt;a href="http://www.andorradotnet.com"&gt;andorradotnet&lt;/a&gt; para que subáis a verme o a dar alguna charla. Estáis avisados...&lt;/p&gt; &lt;p&gt;Ahora voy a dedicar 10 minutos a ver el paisaje a más de 300 Km/h y dejar volar la imaginación... nos vemos.&lt;/p&gt;
** crossposting desde el blog de Lluís Franco en geeks.ms **&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1649778" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lfranco/archive/tags/Tecnologia/default.aspx">Tecnologia</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/Humor/default.aspx">Humor</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/MVP/default.aspx">MVP</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/2008/default.aspx">2008</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/Event/default.aspx">Event</category></item><item><title>Otro año más dando la vara</title><link>http://msmvps.com/blogs/lfranco/archive/2008/10/01/otro-a-241-o-m-225-s-dando-la-vara.aspx</link><pubDate>Wed, 01 Oct 2008 16:24:03 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1649401</guid><dc:creator>lfranco</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lfranco/rsscomments.aspx?PostID=1649401</wfw:commentRss><comments>http://msmvps.com/blogs/lfranco/archive/2008/10/01/otro-a-241-o-m-225-s-dando-la-vara.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/mvp_hor_4A66767E.png"&gt;&lt;img title="mvp_hor" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="94" alt="mvp_hor" src="http://geeks.ms/blogs/lfranco/mvp_hor_thumb_02A77E48.png" width="227" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Alguien de Microsoft se ha equivocado o le ha dado al botón que no era. Acabo de recibir un correo de mvpaward de dice así:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;Enhorabuena. Nos complace presentarle el programa de nombramiento MVP de Microsoft® de 2009. Este nombramiento se concede a los líderes excepcionales de la comunidad técnica que comparten de forma activa su experiencia de alta calidad y de la vida real con otras personas.&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Reconocido por MVP por 6º año consecutivo… WOW! No se si me lo acabo de creer… :-)&lt;/p&gt;  &lt;p&gt;La verdad es que desde tuve la suerte de entrar en el programa (hace 6 pero parece que haga un siglo, por tal y cómo ha cambiado mi vida desde entonces :-P), he tenido la gran suerte de poder conocer un montón de gente fantástica, tanto dentro como fuera de Microsoft. Y a decir verdad está resultando una gran experiencia a nivel personal y profesional, ya que me ha permitido conocer profesionales como la copa de un pino, y además hacer amigos de los que duran toda una vida.&lt;/p&gt;  &lt;p&gt;Además, mañana salgo para Madrid para participar en el &lt;a href="https://mvp.support.microsoft.com/" target="_blank"&gt;MVP&lt;/a&gt; Open Day de este año, y tengo unas ganas tremendas de rencontrarme con todos los demás. En estos eventos las sesiones técnicas son impresionantes, pero es que además lo pasamos de miedo en las cenas, bautizos, etc.&lt;/p&gt;  &lt;p&gt;Para muestra un botón:&lt;/p&gt;  &lt;p&gt;Bautizo de un MVP:    &lt;br /&gt;&lt;a title="http://es.youtube.com/watch?v=KNwA7QlvKvk" href="http://es.youtube.com/watch?v=KNwA7QlvKvk"&gt;http://es.youtube.com/watch?v=KNwA7QlvKvk&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Fotos de varios eventos:    &lt;br /&gt;&lt;a href="http://www.uyssoft.com/Gallery/MVPSummit2005"&gt;MVP Summit 2005 (27/09/2005 - 01/10/2005)&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://www.uyssoft.com/Gallery/MVPOpenDay20052005"&gt;MVP Open day (19/05/2005 - 20/05/2005)&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://www.uyssoft.com/Gallery/MVPOpenDay12112004/"&gt;MVP Open day (11/11/2004 - 12/11/2004)&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://www.uyssoft.com/Gallery/MVPOpenDay28052004/"&gt;MVP Open Day (27/05/2004 - 28/05/2004)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Nos vemos en las comunidades online!    &lt;br /&gt;Saludos desde Andorra,&lt;/p&gt;
** crossposting desde el blog de Lluís Franco en geeks.ms **&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1649401" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lfranco/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/MVP/default.aspx">MVP</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/2008/default.aspx">2008</category></item><item><title>Silverlight 2 RC Disponible</title><link>http://msmvps.com/blogs/lfranco/archive/2008/09/26/silverlight-2-rc-disponible.aspx</link><pubDate>Fri, 26 Sep 2008 09:04:26 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1648942</guid><dc:creator>lfranco</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lfranco/rsscomments.aspx?PostID=1648942</wfw:commentRss><comments>http://msmvps.com/blogs/lfranco/archive/2008/09/26/silverlight-2-rc-disponible.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/silverlight_27F7311A.jpg"&gt;&lt;img title="silverlight" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="105" alt="silverlight" src="http://geeks.ms/blogs/lfranco/silverlight_thumb_22A84A69.jpg" width="141" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Leo en el blog de &lt;a href="http://weblogs.asp.net/scottgu/default.aspx"&gt;ScottGu&lt;/a&gt;, que esta madrugada se ha liberado la primera RC pública de Silverlight 2.&lt;/p&gt;  &lt;p&gt;Se han corregiso algunos bugs, se ha actualizado el API desde la versión anterior y han aparecido algunos elementos nuevos en el núcleo, como los controles ComboBox, ProgressBar, y PasswordBox (dejando el tamaño igualmente en 4.6MB). &lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/silverlight_controls_7DAA89EF.png"&gt;&lt;img title="silverlight_controls" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="182" alt="silverlight_controls" src="http://geeks.ms/blogs/lfranco/silverlight_controls_thumb_1B8B9EA2.png" width="337" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;También me ha llamado la atención la incorporación del MessageBox.Show(), que permite mostrar cuadros de mensaje como en una aplicación de escritorio:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/silverlight_msgbox_3657C4AE.png"&gt;&lt;img title="silverlight_msgbox" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="305" alt="silverlight_msgbox" src="http://geeks.ms/blogs/lfranco/silverlight_msgbox_thumb_50BA4876.png" width="402" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Nuevos skins de controles, que han cambiado respecto a la Beta 1 y 2:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/silverlight_skins_58D4057C.png"&gt;&lt;img title="silverlight_skins" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="379" alt="silverlight_skins" src="http://geeks.ms/blogs/lfranco/silverlight_skins_thumb_2E89EF03.png" width="644" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Una de las capacidades más potentes de Silverlight es la posibilidad para los diseñadores y desarrolladores de personalizar completamente el aspecto de cualquier control. Esto permite ir más allá de estilos simples de colores y fuentes. De hecho, literalmente podemos cambiar el interfaz de usuario visual de este control, así como personalizar su comportamiento (por ejemplo agregando animaciones) sin agregar ninguna línead de código.&lt;/p&gt;  &lt;p&gt;Cuando estamos editando la plantilla de un control, podemos manipular cualquier sub-elemento del control (por ejemplo, el contenido interno de un CheckBox), ásí cómo personalizar sus ‘estados’ (observar el panel de estados señalados en rojo). Esto permite a los diseñadores personalizar el aspecto del control en cada estado (seleccionado, no seleccionado, al pasar el mouse por encima, etc.).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/silverlight_states_51062FD1.png"&gt;&lt;img title="silverlight_states" style="border-right:0px;border-top:0px;display:inline;border-left:0px;border-bottom:0px;" height="484" alt="silverlight_states" src="http://geeks.ms/blogs/lfranco/silverlight_states_thumb_449D2E0A.png" width="451" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;En fin, esto se anima ya que el lanzamiento final de Silverlight está cada vez más cerca!!!   &lt;br /&gt;A disfrutarlo,&lt;/p&gt;
** crossposting desde el blog de Lluís Franco en geeks.ms **&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1648942" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lfranco/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>Guille Community Tour 2008 – 13 Octubre 2008 en Andorra</title><link>http://msmvps.com/blogs/lfranco/archive/2008/09/23/guille-community-tour-2008-13-octubre-2008-en-andorra.aspx</link><pubDate>Tue, 23 Sep 2008 10:34:45 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1648643</guid><dc:creator>lfranco</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lfranco/rsscomments.aspx?PostID=1648643</wfw:commentRss><comments>http://msmvps.com/blogs/lfranco/archive/2008/09/23/guille-community-tour-2008-13-octubre-2008-en-andorra.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/Guille%20Community%20Tour%202008%20-%20Vista%20previa_56D0676E.png"&gt;&lt;img title="Guille Community Tour 2008 - Vista previa" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;margin:0px 10px 0px 0px;border-right-width:0px;" height="484" alt="Guille Community Tour 2008 - Vista previa" src="http://geeks.ms/blogs/lfranco/Guille%20Community%20Tour%202008%20-%20Vista%20previa_thumb_715A273C.png" width="343" align="left" border="0" /&gt;&lt;/a&gt;Como muchos ya sabréis, entre varios grupos de usuarios de España y parte del extranjero :-P, hemos organizado una gira con el ‘aguelo’ de todos los MVPs: Guillermo ‘el &lt;a title="Guille" href="http://www.elguille.info/" target="_blank"&gt;Guille&lt;/a&gt;’ Som. Nota: Que conste que si le llamo ‘aguelo’ es sólo por que es el &lt;a href="https://mvp.support.microsoft.com/" target="_blank"&gt;MVP&lt;/a&gt; más antiguo, ya que ha sido nominado desde 1997 de forma ininterrumpida, y no a su edad (que como todos sabemos está hecho un chaval).&lt;/p&gt;  &lt;p&gt;Esta gira llegará a tierras Andorranas el 13 de Octubre, de modo que si estás cerca de aquí ya lo sabes ¡no puedes perdértelo!&lt;/p&gt;  &lt;p&gt;En ella Guille nos hablará de las novedades de VB2008, así que si eres desarrollador de software no te lo puedes perder, ya que Guillermo es una de las personas que más sabe de esto en España, y además es un ponente internacional que ha escrito multitud de libros al respecto.&lt;/p&gt;  &lt;p&gt;Y más todavía cuando también contaremos con la presencia de &lt;a href="http://geeks.ms/blogs/dsalgado/default.aspx" target="_blank"&gt;David ‘supermán’ Salgado&lt;/a&gt;, que nos ofrecerá una de sus estupendas sesiones sobre ‘Opciones para el desarrollo de un sitio web .NET’. La verdad es que tiene una pinta estupenda, ya que David es un crack dentro de los cracks.&lt;/p&gt;  &lt;p&gt;Para cerrar la reunión responderemos a las preguntas que se hayan planteado en el foro de AndorraDotNet que hemos habilitado para tal efecto:   &lt;br /&gt;&lt;a title="http://andorradotnet.com/forums/t/277.aspx" href="http://andorradotnet.com/forums/t/277.aspx"&gt;http://andorradotnet.com/forums/t/277.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Y como siempre, realizaremos sorteos de regalos entre los asistentes, aunque aquí me gustaría hacer una aclaración:&lt;/p&gt;  &lt;p&gt;Esta es una &lt;strong&gt;gira solidaria&lt;/strong&gt;, ya que gracias al Guille y su corazón de oso hemos conseguido que varias empresas importantes nos cedan licencias de software (desde un Visual Studio 2008 Profesional o dos suscripcions MSDN premium hasta diez licencias de ReSharper y dotTrace), y de éste modo las podamos sortear para recaudar fondos para ayudar a un niño a superar una enfermedad: &lt;a href="http://www.ayudajuanma.es/"&gt;¡Ayuda a Juanma a vivir!&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Más información sobre Juanma en:   &lt;br /&gt;&lt;a title="http://www.ayudajuanma.es/" href="http://www.ayudajuanma.es/"&gt;http://www.ayudajuanma.es/&lt;/a&gt;    &lt;br /&gt;&lt;a title="http://geeks.ms/blogs/lfranco/archive/2008/03/03/no-t-233-cnico-ma-241-ana-cumple-a-241-os-juansa.aspx" href="http://geeks.ms/blogs/lfranco/archive/2008/03/03/no-t-233-cnico-ma-241-ana-cumple-a-241-os-juansa.aspx"&gt;http://geeks.ms/blogs/lfranco/archive/2008/03/03/no-t-233-cnico-ma-241-ana-cumple-a-241-os-juansa.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Agenda del evento     &lt;br /&gt;&lt;/strong&gt;09:30 a 09:45 – Entrada y registro     &lt;br /&gt;09:45 a 10:00 – Bienvenida del grupo de usuarios AndorraDotNet - &lt;em&gt;Lluis Franco&lt;/em&gt;     &lt;br /&gt;10:00 a 11:45 – ‘Novedades de VB 9.0’ - &lt;em&gt;El Guille&lt;/em&gt;     &lt;br /&gt;11:45 a 12:00 – Café i descanso     &lt;br /&gt;12:00 a 13:30 – ‘Opciones para el desarrollo de un sitio web .NET’ - &lt;em&gt;David Salgado&lt;/em&gt;     &lt;br /&gt;13:30 a 14:00 – ‘Ask the experts’ (resolución de preguntas)     &lt;br /&gt;14:00 a 14:15 – Sorteo de regalos&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Localización     &lt;br /&gt;&lt;/strong&gt;Sala La closeta     &lt;br /&gt;La Massana, Andorra     &lt;br /&gt;Dentro de la Casa Comunal (dónde se hace el salón del cómic)    &lt;br /&gt;&lt;strong&gt;Assistència gratuita&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Ya os podéis registrar para el evento de Andorra mediante este enlace a la página de eventos de Microsoft:   &lt;br /&gt;Registre: &lt;a href="http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032389730&amp;amp;Culture=es-ES"&gt;http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032389730&amp;amp;Culture=es-ES&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;&lt;font size="2"&gt;Guille Community Tour 2008 – Andorra      &lt;br /&gt;&lt;/font&gt;&lt;font size="2"&gt;Id. de evento: 1032389730&lt;/font&gt;&lt;/h3&gt;  &lt;p&gt;Más información del tour en la &lt;a href="http://www.elguille.info/lonuevo/2008/septiembre/10_Guille_Community_Tour_2008_GCT2008.aspx"&gt;Web del Guille&lt;/a&gt; o en &lt;a href="http://www.microsoft.com/spanish/msdn/spain/eventos/communitytour.mspx"&gt;MSDN events&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Os esperamos el próximo 13 de Octubre en la Massana!    &lt;br /&gt;El equipo de AndorraDotNet :-)&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Por cierto, el cartel ha sido obra del artista &lt;a href="http://www.navarradotnet.com/post/Desarrollar-software-no-es-solo-picar-codigo.aspx"&gt;Sergio Jimenez&lt;/a&gt;, miembro de &lt;a href="http://www.navarradotnet.com/"&gt;NavarraDotNet&lt;/a&gt;. Gracias Sergio, te has salido!&lt;/p&gt;
** crossposting desde el blog de Lluís Franco en geeks.ms **&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1648643" width="1" height="1"&gt;</description></item><item><title>Folder size: Primer contacto</title><link>http://msmvps.com/blogs/lfranco/archive/2008/08/08/folder-size-primer-contacto.aspx</link><pubDate>Fri, 08 Aug 2008 12:09:51 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1643916</guid><dc:creator>lfranco</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lfranco/rsscomments.aspx?PostID=1643916</wfw:commentRss><comments>http://msmvps.com/blogs/lfranco/archive/2008/08/08/folder-size-primer-contacto.aspx#comments</comments><description>&lt;p&gt;Harto de buscar dónde se iba el espacio de mi disco duro, y con la sensación de que estaba malgastando un porrón de bytes (y os aseguro que no es en peliXculas), me puse a diseñar una herramienta que me mostrase lo que ocupa cada una de las carpetas de mi ordenador. De esto hace un par de días, y la verdad es que me he liado la manta a la cabeza :-P y al final el resultado es este:  &lt;p&gt;&lt;a href="http://andorradotnet.com/blogs/lfranco/WindowsLiveWriter/FolderSizePrimercontacto_13F85/FolderSize1_2.png"&gt;&lt;img height="484" alt="FolderSize1" src="http://andorradotnet.com/blogs/lfranco/WindowsLiveWriter/FolderSizePrimercontacto_13F85/FolderSize1_thumb.png" width="629" border="0" /&gt;&lt;/a&gt;  &lt;p&gt;Está enteramente escrito en C# 3.0 y aunque el funcionamiento es más sencillo que el mecanismo de un botijo (al fin y al cabo sólo recorre una estructura de carpetas y va procesando archivos), el resultado me gusta. Para compensar su sencillez le he añadido una interfaz cool (al menos para mí :-P), multithreading en la búsqueda, que a su vez hace uso de llamadas al FindFirstFile y FindNextFile para mejorar la performance... Aunque seguro que mi amigo el &lt;a href="http://geeks.ms/blogs/rfog/default.aspx"&gt;rano&lt;/a&gt;, belmonte de pro, me dice que si quiero ver performance me deje de tonterías y vuelva al C++ duro. Y os juro y perjuro que ya no me acuerdo de cómo se cocinaba con punteros. Además el resultado puede imprimirse o también exportar a Excel o PDF, y también muestra una lista de posibles errores producidos durante el análisis de la(s) carpeta(s), que mayormente son de acceso a ciertos elementos de sistema (o ubicaciones de red con permisos NTFS).  &lt;p&gt;Si a alguien le apetece probarlo os lo podéis instalar desde esta ubicación:  &lt;p&gt;&lt;a href="http://utilities.ordeeno.com/foldersize/"&gt;http://utilities.ordeeno.com/foldersize/&lt;/a&gt;  &lt;p&gt;El único requisito es el Framework 3.5, y si no lo tenéis instalado el programa de instalación muy amablemente lo hará por vosotros (eso si, tarda un ratito).  &lt;p&gt;&lt;a href="http://andorradotnet.com/blogs/lfranco/WindowsLiveWriter/FolderSizePrimercontacto_13F85/FolderSizeSetup_2.png"&gt;&lt;img height="484" alt="FolderSizeSetup" src="http://andorradotnet.com/blogs/lfranco/WindowsLiveWriter/FolderSizePrimercontacto_13F85/FolderSizeSetup_thumb.png" width="583" border="0" /&gt;&lt;/a&gt;  &lt;p&gt;La licencia es beerware, lo cual quiere decir que si te gusta y lo usas... deberás invitarme al menos a una cerveza. Y si es con papas, mejor que mejor!  &lt;p&gt;Bye @ home,  &lt;p&gt;PD - Lo he probado en XP y Vista Ultimate y de momento no le he encontrado ningún bug grave, pero si vosotros lo hacéis podéis contactar conmigo &lt;a href="http://geeks.ms/blogs/lfranco/contact.aspx"&gt;aquí&lt;/a&gt;.&lt;/p&gt;
** crossposting desde el blog de Lluís Franco en geeks.ms **&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1643916" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lfranco/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/2008/default.aspx">2008</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/Utilidad/default.aspx">Utilidad</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/Herramientas/default.aspx">Herramientas</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/Windows/default.aspx">Windows</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/API/default.aspx">API</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/Beerware/default.aspx">Beerware</category></item><item><title>Quieres ver las caras del VBTeam?</title><link>http://msmvps.com/blogs/lfranco/archive/2008/07/24/quieres-ver-las-caras-del-vbteam.aspx</link><pubDate>Thu, 24 Jul 2008 08:04:16 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1641971</guid><dc:creator>lfranco</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lfranco/rsscomments.aspx?PostID=1641971</wfw:commentRss><comments>http://msmvps.com/blogs/lfranco/archive/2008/07/24/quieres-ver-las-caras-del-vbteam.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/bethmassi" target="_blank"&gt;Beth Massi&lt;/a&gt; publica un par de fotos en el &lt;a href="http://blogs.msdn.com/vbteam/default.aspx"&gt;blog del VBTeam&lt;/a&gt;, y nos cuenta la anécdota de porque todos visten de gris.&lt;/p&gt; &lt;p&gt;&lt;img src="http://blogs.msdn.com/photos/vbteam_gallery2/images/8767850/500x375.aspx" alt="" /&gt; &lt;p&gt;&lt;img src="http://blogs.msdn.com/photos/vbteam_gallery2/images/8767852/500x375.aspx" alt="" /&gt; &lt;p&gt;Saludos,&lt;/p&gt;
** crossposting desde el blog de Lluís Franco en geeks.ms **&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1641971" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lfranco/archive/tags/Humor/default.aspx">Humor</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/VB/default.aspx">VB</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/Frikadas/default.aspx">Frikadas</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/Off-Topic/default.aspx">Off-Topic</category></item><item><title>VBTeam - How Do I Videos (WPF Forms over Data)</title><link>http://msmvps.com/blogs/lfranco/archive/2008/07/18/vbteam-how-do-i-videos-wpf-forms-over-data.aspx</link><pubDate>Fri, 18 Jul 2008 08:00:48 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1641317</guid><dc:creator>lfranco</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lfranco/rsscomments.aspx?PostID=1641317</wfw:commentRss><comments>http://msmvps.com/blogs/lfranco/archive/2008/07/18/vbteam-how-do-i-videos-wpf-forms-over-data.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/VBTeamHowDoIVideosWPFFormsoverData_7E7F/movie_2.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="97" alt="movie" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/VBTeamHowDoIVideosWPFFormsoverData_7E7F/movie_thumb.jpg" width="128" border="0" /&gt;&lt;/a&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/bethmassi/"&gt;Beth Massi&lt;/a&gt; del equipo de VB, ha publicado nuevos videos en el sitio “How Do I” Videos — Visual Basic. En este caso se trata de dos videos que muestran cómo crear formularios basados en datos en Windows Presentation Foundation usando Visual Studio 2008. &lt;p&gt;&lt;strong&gt;How Do I: Create a Simple Data Entry Form in WPF?&lt;/strong&gt; &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/vbasic/cc707833.aspx"&gt;&lt;img alt="" src="http://i.msdn.microsoft.com/bb466226.howdoi_vb_wpffod_01(en-us).jpg" /&gt;&lt;/a&gt; &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/vbasic/cc707833.aspx"&gt;#1 | How Do I: Create a Simple Data Entry Form in WPF?&lt;/a&gt;&lt;br /&gt;(24 minutes, 32 seconds) &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/vbasic/cc720679.aspx"&gt;&lt;img alt="" src="http://i.msdn.microsoft.com/bb466226.howdoi_vb_wpffod_02(en-us).jpg" /&gt;&lt;/a&gt; &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/vbasic/cc720679.aspx"&gt;#2 | How Do I: Display Data in a List in WPF?&lt;/a&gt;&lt;br /&gt;(11 minutes, 47 seconds) &lt;p&gt;El link en: &lt;a title="http://msdn.microsoft.com/en-us/vbasic/bb466226.aspx#wpfdata" href="http://msdn.microsoft.com/en-us/vbasic/bb466226.aspx#wpfdata"&gt;http://msdn.microsoft.com/en-us/vbasic/bb466226.aspx#wpfdata&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Si no conoceis el sitio &lt;a href="http://msdn.microsoft.com/en-us/vbasic/bb466226.aspx"&gt;“How Do I” Videos&lt;/a&gt; darle un vistazo, que merece la pena y mucho... :-)&lt;/p&gt;
** crossposting desde el blog de Lluís Franco en geeks.ms **&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1641317" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lfranco/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/VB/default.aspx">VB</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/2008/default.aspx">2008</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/HowTo/default.aspx">HowTo</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/WPF/default.aspx">WPF</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/Videos/default.aspx">Videos</category></item><item><title>HowTo: LDAP, obtener propiedades de la clase user</title><link>http://msmvps.com/blogs/lfranco/archive/2008/07/16/howto-ldap-obtener-propiedades-de-la-clase-user.aspx</link><pubDate>Wed, 16 Jul 2008 16:23:42 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1641103</guid><dc:creator>lfranco</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lfranco/rsscomments.aspx?PostID=1641103</wfw:commentRss><comments>http://msmvps.com/blogs/lfranco/archive/2008/07/16/howto-ldap-obtener-propiedades-de-la-clase-user.aspx#comments</comments><description>&lt;p&gt;Hace poco publicaba una &lt;a href="http://geeks.ms/blogs/lfranco/archive/2008/07/10/correcci-243-n-funci-243-n-getuserldapproperties.aspx"&gt;actualización&lt;/a&gt; del método getUserLDAProperties de la clase LDAPservices. Esta función se encarga de recuperar todas las propiedades de la clase &amp;#39;user&amp;#39; definidas&amp;nbsp; en el esquema del AD de la organización.&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/HowToLDAPobtenerpropiedadesdelaclaseuser_F452/LDAPUserProperties.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="244" alt="LDAPUserProperties" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/HowToLDAPobtenerpropiedadesdelaclaseuser_F452/LDAPUserProperties_thumb.png" width="213" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;La verdad es que dicha corrección no me terminaba de satisfacer. Así que después de bucear un poco por el modelo de objetos del namespace System.DirectoryServices.ActiveDirectory he encontrado un método más elegante, y que además permite acceder a más propiedades opcionales (algo que la anterior versión no permitía).&lt;/p&gt; &lt;p&gt;Os dejo aquí el código y en cuando tenga un minuto actualizo el código fuente de LDAPServices en skydrive.&lt;/p&gt; &lt;div&gt; &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; List&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt; &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    getUserLDAPProperties(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; LDAPURL)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;{&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    List&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt; properties =&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="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    ActiveDirectorySchema objADSchema = ActiveDirectorySchema.GetCurrentSchema();&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    ActiveDirectorySchemaClass objADUserSchema;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    ActiveDirectorySchemaPropertyCollection objADPropertiesCollection;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    objADUserSchema = objADSchema.FindClass(&lt;span style="color:#006080;"&gt;&amp;quot;user&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    objADPropertiesCollection = objADUserSchema.MandatoryProperties;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (ActiveDirectorySchemaProperty objADSchemaProperty &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; objADPropertiesCollection)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        properties.Add(objADSchemaProperty.Name);&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    objADPropertiesCollection = objADUserSchema.OptionalProperties;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (ActiveDirectorySchemaProperty objADSchemaProperty &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; objADPropertiesCollection)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        properties.Add(objADSchemaProperty.Name);&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; (from p &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; properties orderby p select p).ToList();&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Nos vemos!&lt;/p&gt;
** crossposting desde el blog de Lluís Franco en geeks.ms **&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1641103" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lfranco/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/2008/default.aspx">2008</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/LDAP/default.aspx">LDAP</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/HowTo/default.aspx">HowTo</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/Correccion/default.aspx">Correccion</category></item><item><title>¿Goodbye Dictionary?</title><link>http://msmvps.com/blogs/lfranco/archive/2008/07/15/191-goodbye-dictionary.aspx</link><pubDate>Tue, 15 Jul 2008 09:07:45 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1640860</guid><dc:creator>lfranco</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lfranco/rsscomments.aspx?PostID=1640860</wfw:commentRss><comments>http://msmvps.com/blogs/lfranco/archive/2008/07/15/191-goodbye-dictionary.aspx#comments</comments><description>&lt;p&gt;&lt;strong&gt;Corrección al artículo (16/07/2008): &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Todas las mediciones de tiempo efectuadas en las compartivas entre listas y diccionarios han sido mal efectuadas y no son válidas. Porqué? Porque a un servidor se le olvidó &amp;#39;resetear&amp;#39; el cronómetro del StopWatch entre una medición y otra (ay, ay, ay...), de modo que los tiempos tomados para el objeto dictionary incluyen también los de la lista, y por eso son mucho mayores de lo esperado.&lt;/p&gt; &lt;p&gt;Un &amp;#39;pequeño&amp;#39; olvido pero que afecta totalmente al sentido del post, ya que la conclusión del post era que acceder a un elemento de un diccionario NO era más rápido que acceder a un elemento de una lista, cuando la realidad es que SI lo es... y mucho. Siento haber publicado lo contrario y aquí me retracto.&lt;/p&gt; &lt;p&gt;De este error puedo sacar varias conclusiones:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;u&gt;Revisar&lt;/u&gt;: Acostumbrarme a revisar más en profundidad lo que publico. He usado infinidad de veces el objeto StopWatch y no es nuevo para mi, así que todavía me duele más haberme olvidado de reiniciar el crono... Muchas gracias por el comentario Steven.&lt;/li&gt; &lt;li&gt;&lt;u&gt;No hacer tantas cosas al mismo tiempo&lt;/u&gt;: La verdad es que cuando escribí el post estaba haciendo varias cosas al mismo tiempo, entre las cuales me encontraba realizando unas pruebas para una aplicación, y al medir los tiempos me quedé muy sorprendido y empecé a escribir el post sin detectar el error en mi código.&lt;/li&gt; &lt;li&gt;&lt;u&gt;Todos nos equivocamos&lt;/u&gt;: Eso es evidente, y cualquiera puede cometer un error como este. Lo malo es que en lugar de escribir el post rápidamente y publicarlo, debería haberlo dejado para revisarlo hoy... pero lo hecho hecho está. &lt;/li&gt; &lt;li&gt;&lt;u&gt;Hay que aprender de los errores&lt;/u&gt;: Prefiero hacer algo y equivocarme a no hacer nada y no equivocarme. Con todo, espero aprender algo de todo esto, porque todos seguimos aprendiendo día a día (y malo del día que no lo hagamos).&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Pero vamos con la corrección. Los nuevos tiempos si agregamos un &lt;font color="#ff0000"&gt;watch.Reset();&lt;/font&gt; antes de empezar a tomar los tiempos del diccionario son los siguientes:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Compare load 100000 items in List vs. Dict. (ms.)&lt;br /&gt;List: 678,4068&lt;br /&gt;Dict: 759,5071&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;Compare get one item by key in List vs. Dict. (ms.)&lt;br /&gt;List: 0,3645&lt;br /&gt;Dict: 0,0058&lt;/strong&gt; &lt;p&gt;&lt;strong&gt;Compare verify one item by key in List vs. Dict. (ms.)&lt;br /&gt;List: 0,2748&lt;br /&gt;Dict: 0,0058&lt;/strong&gt; &lt;p&gt;La conclusión es que cargar datos en un diccionario es sólamente un poco más lento que cargarlos en una lista. mientras que es mucho más rápido acceder a los elementos que contiene (del orden 50 veces más rápido aproximadamente). &lt;u&gt;Evidentemente esto justifica sobradamente el uso de diccionarios&lt;/u&gt;.&lt;/p&gt; &lt;p&gt;Bueno... Tal vez el título del artículo ahora debería quedar como &amp;quot;¿Goodbye Dictionary? ¡Hola melón!&amp;quot; :-P&lt;/p&gt; &lt;p&gt;Saludos desde Andorra,&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Fin de la corrección al artículo&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;El artículo original (15/07/2008):&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Generics&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;La aparición del framework 2.0 nos trajo una grata sorpresa: La aparición de Generics, que nos proveía por fin de un conjunto de colecciones fuertemente tipadas, que mejoraban mucho el rendimiento al evitar el uso de boxing y unboxing, y permitían un código mucho más legible, elegante, así como detectar y prevenir muchos errores en tiempo de compilación.&lt;/p&gt; &lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/GoodbyeDictionary_ED51/GenericsError1.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="170" alt="GenericsError1" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/GoodbyeDictionary_ED51/GenericsError1_thumb.png" width="567" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Desde ,entonces, de todos los distintos tipos de colecciones genéricas, en el 90% de los casos he usado estos dos: &lt;strong&gt;List&lt;/strong&gt; y &lt;strong&gt;Dictionary&lt;/strong&gt;. El primero de ellos es obviamente una lista de objetos &amp;lt;T&amp;gt;, algo de uso cotidiano, y el segundo es el equivalente genérico del viejo diccionario, que permite guardar una colección de elementos y una clave para acceder a ellos &amp;lt;TKey&amp;gt;, &amp;lt;TValue&amp;gt;:&lt;/p&gt; &lt;div&gt; &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;Dictionary&amp;lt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;, CPItem&amp;gt; dict = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;, CPItem&amp;gt;();&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Este tipo diccionario es ideal para almacenar una serie de objetos (por ejemplo clientes que provienen de una BD) y poder acceder a uno de ellos a través de su campo clave o identificador, sea éste del tipo que sea (por ejemplo en el caso anterior la clave es de tipo int):&lt;/p&gt;
&lt;div&gt;
&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;CPItem item2 = dict[24];&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;De este modo, es muy sencillo acceder a un elemento de la colección a través del valor de su identificador (no confundir con su posición dentro de la lista). Sin embargo y a pesar de su innegable potencia, hay un par de cosas que no me gustan de los diccionarios:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Siempre es &lt;u&gt;más lento&lt;/u&gt; cargar los objetos en un diccionario que en una lista (del orden de 2 a 1 aproximadamente) 
&lt;li&gt;Un diccionario &lt;u&gt;no es serializable&lt;/u&gt; &amp;#39;per se&amp;#39; (al menos sin hacer &lt;a href="http://weblogs.asp.net/avnerk/archive/2006/05/23/Serilalizing-Dictionaries.aspx" target="_blank"&gt;trucos&lt;/a&gt;), y esto SI puede ser un problema.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Sin embargo, tiene la gran ventaja frente a la lista de que permite acceder de forma casi instantánea a un elemento de la misma, y además contiene métodos que permiten verificar si la colección contiene un elemento, ya sea por clave o por valor. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;List vs. Dictionary&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Veamos un ejemplo rápido, declaramos una clase con algunos miembros de diversos tipos de datos (para tener de todo un poco) y usamos esta clase para cargar varios objetos en una lista y un diccionario respectivamente:&lt;/p&gt;
&lt;div&gt;
&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; CPItem&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;{&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;const&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; max = 1000000;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; propInt { get; set; }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; propString { get; set; }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; DateTime propDateTime { get; set; }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; propBool { get; set; }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;double&lt;/span&gt; propDouble { get; set; }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; CPItem(&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; propint)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        Random r = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Random(max);&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        propInt = propint;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        propString = &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color:#006080;"&gt;&amp;quot;Item {0}&amp;quot;&lt;/span&gt;, propint.ToString(&lt;span style="color:#006080;"&gt;&amp;quot;000000&amp;quot;&lt;/span&gt;));&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        propDateTime.AddDays(propint);&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        propBool = propint &amp;lt;= 0.5 ? &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt; : &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        propDouble = r.NextDouble() * max;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Declaramos los dos objetos genéricos:&lt;/p&gt;
&lt;div&gt;
&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;List&amp;lt;CPItem&amp;gt; list = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; List&amp;lt;CPItem&amp;gt;();&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;Dictionary&amp;lt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;, CPItem&amp;gt; dict = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;, CPItem&amp;gt;();&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Y a continuación usamos un &lt;a href="http://msdn.microsoft.com/es-es/library/system.diagnostics.stopwatch.aspx" target="_blank"&gt;StopWatch&lt;/a&gt; para medir los tiempos de carga de 100.000 elementos... y podremos observar una gran diferencia:&lt;/p&gt;
&lt;div&gt;
&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; LoadListDict()&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;{&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;const&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; max = 100000;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    Stopwatch watch = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Stopwatch();&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    list.Clear();&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    watch.Start();&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; i = 1; i &amp;lt;= max; i++)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        list.Add(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; CPItem(i));&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    watch.Stop();&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    TimeSpan ts1 = watch.Elapsed;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    dict.Clear();&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    watch.Start();&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; i = 1; i &amp;lt;= max; i++)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        dict.Add(i, &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; CPItem(i));&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    }&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    watch.Stop();&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    TimeSpan ts2 = watch.Elapsed;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.ResultsTextBox.Text = &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        &lt;span style="color:#006080;"&gt;&amp;quot;Compare load {0} items in List vs. Dict. (ms.)\r\nList: {1}\r\nDict: {2}&amp;quot;&lt;/span&gt;,&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        max.ToString(),&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        ts1.TotalMilliseconds.ToString(),&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        ts2.TotalMilliseconds.ToString());&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;En mi estación estos son los tiempos promedio de carga después de ejecutar 5 veces:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Compare load 100000 items in List vs. Dict. (ms.)&lt;br /&gt;List: 737,1392&lt;br /&gt;Dict: 1479,4486&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Bien, está claro que si hay que elegir entre ambos hay que tener un buen motivo para escoger el diccionario... ¡ya que la lista es el doble de rápida!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;LINQ to objects&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Con la aparición de VS2008 y del framework 3.5, aparecen las expresiones de consulta. Éstas nos permiten manipular colecciones de objetos en memoria, para filtrarlos, ordenarlos y agruparlos según nuestras necesidades.&lt;/p&gt;
&lt;p&gt;Así que es posible que nos preguntemos ¿es necesario el uso de diccionarios, si ahora disponemos de LINQ para manejar listas? Es decir, si puedo cargar los datos en una lista genérica y acceder mediante LINQ to objects a un elemento, o a un subconjunto de éstos... ¿qué sentido tiene usar un dictionary?&lt;/p&gt;
&lt;p&gt;Uhm... Pues supongo que el rendimiento podría ser un factor, ya que según la documentación de este objeto: &lt;em&gt;Retrieving a value by using its key is very fast, close to O(1), because the Dictionary&amp;lt;(Of &amp;lt;(TKey, TValue&amp;gt;)&amp;gt;) class is implemented as a hash table.&lt;/em&gt; O dicho de otro modo: Recuperar un valor utilizando su clave es muy rápido, porque la clase Dictionary se implementa como una tabla hash. &lt;/p&gt;
&lt;p&gt;Ya sabía yo que había un buen motivo para usar un diccionario: Debe ser más mucho más rápido al acceder a un objeto a través de su clave que extraerlo de una lista mediante LINQ... seguro! .... ¿o tal vez no?&lt;/p&gt;
&lt;p&gt;Hagamos un par de pruebas: &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A) Cuanto tardamos en recuperar a un elemento a través de su clave:&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; GetOneItemByKey(&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; keyvalue)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;{&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (list.Count == 0 || dict.Count == 0) LoadListDict();&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    Stopwatch watch = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Stopwatch();&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    watch.Start();&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    CPItem item1 = (from l &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; list &lt;span style="color:#0000ff;"&gt;where&lt;/span&gt; l.propInt == keyvalue select l).Single();&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    watch.Stop();&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    TimeSpan ts1 = watch.Elapsed;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    watch.Start();&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    CPItem item2 = dict[keyvalue];&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    watch.Stop();           &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    TimeSpan ts2 = watch.Elapsed;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.ResultsTextBox.Text = &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        &lt;span style="color:#006080;"&gt;&amp;quot;Compare get one item by key in List vs. Dict. (ms.)\r\nList: {0}\r\nDict: {1}&amp;quot;&lt;/span&gt;,&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        ts1.TotalMilliseconds.ToString(),&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        ts2.TotalMilliseconds.ToString());&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;En mi estación estos son los tiempos promedio de carga después de ejecutar 5 veces: 
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Compare get one item by key in List vs. Dict. (ms.)&lt;br /&gt;List: 3,8518&lt;br /&gt;Dict: 3,8566&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Pues parece que ambos tiempos son iguales. Es más, acceder a la colección a través de LINQ ¡es incluso un poquito más rápido! Uhm, vaya... bueno, veamos el segundo ejemplo antes de sacar conclusiones: 
&lt;p&gt;&lt;strong&gt;B) Cuanto tardamos en verificar si existe un elemento a través de su clave:&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; VerifyOneItemByKey(&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; keyvalue)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;{&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (list.Count == 0 || dict.Count == 0) LoadListDict();&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    Stopwatch watch = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Stopwatch();&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    watch.Start();&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    var items = from l &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; list &lt;span style="color:#0000ff;"&gt;where&lt;/span&gt; l.propInt == keyvalue select l;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; v1 = (items.Count() == 0);&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    watch.Stop();&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    TimeSpan ts1 = watch.Elapsed;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    watch.Start();&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; v2 = dict.ContainsKey(keyvalue);&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    watch.Stop();&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    TimeSpan ts2 = watch.Elapsed;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.ResultsTextBox.Text = &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;.Format(&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        &lt;span style="color:#006080;"&gt;&amp;quot;Compare verify one item by key in List vs. Dict. (ms.)\r\nList: {0}\r\nDict: {1}&amp;quot;&lt;/span&gt;,&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        ts1.TotalMilliseconds.ToString(),&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        ts2.TotalMilliseconds.ToString());&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;En mi estación estos son los tiempos promedio de carga después de ejecutar 5 veces: 
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Compare verify one item by key in List vs. Dict. (ms.)&lt;br /&gt;List: 3,906&lt;br /&gt;Dict: 3,9111&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Pues parece que en este caso ambos tiempos son también iguales. Entonces definitivamente NO ES MÁS RÁPIDO UTILIZAR UN DICCIONARIO PARA ACCEDER A LOS ELEMENTOS QUE CONTIENE A TRAVÉS DE SU CLAVE:&lt;br /&gt;&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="2"&gt;

&lt;tr&gt;
&lt;td&gt;Carga&lt;/td&gt;
&lt;td&gt;Recuperar elemento&lt;/td&gt;
&lt;td&gt;Existe elemento&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/GoodbyeDictionary_ED51/image_2.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="149" alt="image" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/GoodbyeDictionary_ED51/image_thumb.png" width="244" border="0" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/GoodbyeDictionary_ED51/image_6.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="149" alt="image" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/GoodbyeDictionary_ED51/image_thumb_2.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/td&gt;
&lt;td&gt;&lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/GoodbyeDictionary_ED51/image_8.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="149" alt="image" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/GoodbyeDictionary_ED51/image_thumb_3.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Conclusión&lt;/strong&gt;&amp;nbsp; &lt;p&gt;Pues sinceramente, si no es más rápido el acceso a un diccionario, pero es más lento en su carga y encima no es serializable... ¿en qué casos podemos seguir usando diccionarios en lugar de listas? 
&lt;p&gt;Espero vuestras opiniones,&lt;/p&gt;
** crossposting desde el blog de Lluís Franco en geeks.ms **&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1640860" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lfranco/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/2008/default.aspx">2008</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/Comparativa/default.aspx">Comparativa</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/LINQ/default.aspx">LINQ</category></item><item><title>How to: Utilizar en modelo de proveedores de datos de ADO.NET 2.0</title><link>http://msmvps.com/blogs/lfranco/archive/2008/07/12/how-to-utilizar-en-modelo-de-proveedores-de-datos-de-ado-net-2-0.aspx</link><pubDate>Sat, 12 Jul 2008 10:03:31 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1640868</guid><dc:creator>lfranco</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lfranco/rsscomments.aspx?PostID=1640868</wfw:commentRss><comments>http://msmvps.com/blogs/lfranco/archive/2008/07/12/how-to-utilizar-en-modelo-de-proveedores-de-datos-de-ado-net-2-0.aspx#comments</comments><description>&lt;p&gt;(*) Este post es bastante antiguo y lo tenía publicado en otro blog que ya no existe, pero como veo que es un tema recurrente en los &lt;a href="http://forums.microsoft.com/MSDN-ES/default.aspx?SiteID=11"&gt;foros de MSDN&lt;/a&gt; he decidido publicarlo de nuevo. &lt;p&gt;A petición del inefable &lt;a href="http://geeks.ms/members/juansa.aspx"&gt;Juansa&lt;/a&gt;, vamos a ver cómo funciona el modelo de proveedores de ADO.NET 2.0. &lt;p&gt;&lt;a href="http://community.uyssoft.com/blogs/losbelmontes/WindowsLiveWriter/Utilizarenmodelodeproveedoresdedatos.NET_9250/1_2.jpg"&gt;&lt;img height="127" alt="1" src="http://community.uyssoft.com/blogs/losbelmontes/WindowsLiveWriter/Utilizarenmodelodeproveedoresdedatos.NET_9250/1_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;p&gt;Estre modelo es ideal para todas aquellas aplicaciones que deben utilizar distintos proveedores de datos (Access, SQL Server, Oracle), ya que disponen de unas factorías de objetos que proporcionan un nivel de abstracción. Por ejemplo, si deseamos usar el proveedor de SQL Server ya no es necesario usar las clases conexión, comando, etc. que hay dentro del namespace System.Data.SqlClient, ahora podemos crear una factoría basada en SQL Server y pedirle que nos cree una clase de tipo connection, comando, etc. &lt;p&gt;De este modo, si deseamos cambiar el proveedor de datos basta con cambiar el string del nombre del proveedor y la cadena de conexión. Para muestra un botón:&lt;br /&gt; &lt;div&gt; &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;Private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; TestFactoryProviders()    &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; ProviderName &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt; = &lt;span style="color:#006080;"&gt;&amp;quot;System.Data.SqlClient&amp;quot;&lt;/span&gt;    &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; CnnStr &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt; = &lt;span style="color:#006080;"&gt;&amp;quot;Data Source=TU_SERVIDOR_SQL;&amp;quot;&lt;/span&gt; + _      &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        &lt;span style="color:#006080;"&gt;&amp;quot;Initial Catalog=TU_BD;&amp;quot;&lt;/span&gt; + _      &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        &lt;span style="color:#006080;"&gt;&amp;quot;Integrated Security=True&amp;quot;&lt;/span&gt;    &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; SQLStr &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt; = &lt;span style="color:#006080;"&gt;&amp;quot;SELECT * FROM TU_TABLA&amp;quot;&lt;/span&gt;    &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#008000;"&gt;&amp;#39;Crea la factoria en base al proveedor especificado    &lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; Factory &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; DbProviderFactory = DbProviderFactories.GetFactory(ProviderName)    &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#008000;"&gt;&amp;#39;Crea la conexión del tipo apropiado (según proveedor)    &lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; Con &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; DbConnection = Factory.CreateConnection()    &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    Using Con        &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        &lt;span style="color:#008000;"&gt;&amp;#39;Asigna la cadena de conexión        &lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        Con.ConnectionString = CnnStr        &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        Con.Open()        &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        &lt;span style="color:#008000;"&gt;&amp;#39;Crea un command del tipo apropiado (según proveedor)        &lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; Cmd &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; DbCommand = Con.CreateCommand()        &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        Using Cmd            &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;            Cmd.CommandType = CommandType.Text            &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;            Cmd.CommandText = SQLStr            &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;            &lt;span style="color:#008000;"&gt;&amp;#39;Crea un DataTable y lo llena a partir del             &lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;            &lt;span style="color:#008000;"&gt;&amp;#39;DataReader que devuelve el comando            &lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;            &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; dt &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; DataTable = &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; DataTable(&lt;span style="color:#006080;"&gt;&amp;quot;dt1&amp;quot;&lt;/span&gt;)            &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;            dt.Load(Cmd.ExecuteReader())            &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;            &lt;span style="color:#0000ff;"&gt;For&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Each&lt;/span&gt; row &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; DataRow &lt;span style="color:#0000ff;"&gt;In&lt;/span&gt; dt.Rows                &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;                &lt;span style="color:#008000;"&gt;&amp;#39;Haz lo que quieras con los datos... :-P            &lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;            &lt;span style="color:#0000ff;"&gt;Next&lt;/span&gt;        &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; Using        &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        Con.Close()    &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; Using&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; Sub&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Según el ejemplo, cambiando los valores de las dos primeras variables podemos utilizar cualquier origen de datos de forma indistinta.&lt;br /&gt;Happy coding!&lt;/p&gt;
** crossposting desde el blog de Lluís Franco en geeks.ms **&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1640868" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/lfranco/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/VB/default.aspx">VB</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/HowTo/default.aspx">HowTo</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/Foros/default.aspx">Foros</category><category domain="http://msmvps.com/blogs/lfranco/archive/tags/ADO.NET/default.aspx">ADO.NET</category></item><item><title>Corrección función getUserLDAPProperties</title><link>http://msmvps.com/blogs/lfranco/archive/2008/07/10/correcci-243-n-funci-243-n-getuserldapproperties.aspx</link><pubDate>Thu, 10 Jul 2008 09:01:18 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1640146</guid><dc:creator>lfranco</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/lfranco/rsscomments.aspx?PostID=1640146</wfw:commentRss><comments>http://msmvps.com/blogs/lfranco/archive/2008/07/10/correcci-243-n-funci-243-n-getuserldapproperties.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/CorreccinfuncingetUserLDAPProperties_89AA/_tipex_2.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="124" alt="_tipex" src="http://geeks.ms/blogs/lfranco/WindowsLiveWriter/CorreccinfuncingetUserLDAPProperties_89AA/_tipex_thumb.png" width="124" border="0" /&gt;&lt;/a&gt;  &lt;p&gt;Corrección aplicable al post: &lt;p&gt;&lt;a title="http://geeks.ms/blogs/lfranco/archive/2008/07/08/accediendo-al-directorio-activo-de-la-organizaci-243-n-desde-net-iv.aspx" href="http://geeks.ms/blogs/lfranco/archive/2008/07/08/accediendo-al-directorio-activo-de-la-organizaci-243-n-desde-net-iv.aspx"&gt;http://geeks.ms/blogs/lfranco/archive/2008/07/08/accediendo-al-directorio-activo-de-la-organizaci-243-n-desde-net-iv.aspx&lt;/a&gt; &lt;p&gt;Ayer estuve revisando una de las funciones de la librería LDAPservices, que se encarga de devolver los nombres de las propiedades del objeto usuario dentro del AD. Hoy os publico una corrección, ya que observé que la función no devolvía correctamente todos los nombres de propiedades.  &lt;p&gt;Este bug es producido porque en la función se utiliza un objeto DirectorySearcher para devolver todos los objetos de tipo usuario en el AD, a continuación lee los nombres de las propiedades del primer usuario encontrado y los inserta en una colección. A continuación la función no continúa procesando el resto de usuarios, ya que deberían tener las mismas propiedades, no? Pues no. Para mi sorpresa resulta que &lt;u&gt;sólo se devuelven aquellas propiedades del usuario que han sido informadas&lt;/u&gt;:&lt;/p&gt; &lt;div&gt; &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; List&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt; &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    getUserLDAPProperties(&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; LDAPURL)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;{&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    List&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt; properties =&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="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    DirectoryEntry entries = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; DirectoryEntry(LDAPURL);&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    DirectorySearcher searcher = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; DirectorySearcher(&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        entries, &lt;span style="color:#006080;"&gt;&amp;quot;(&amp;amp;(objectCategory=person)(objectClass=user))&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;    &lt;span style="color:#0000ff;"&gt;try&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;    {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;        &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (SearchResult result &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; searcher.FindAll())&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;        {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;            &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; property &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;                result.GetDirectoryEntry().Properties.PropertyNames)&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;            {&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;                properties.Add(property);&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-styl