<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>systemcollections &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://en.wordpress.com/tag/systemcollections/</link>
	<description>Feed of posts on WordPress.com tagged "systemcollections"</description>
	<pubDate>Sun, 29 Nov 2009 16:17:32 +0000</pubDate>

	<generator>http://en.wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[Coleções Case-Insensitive [Parte 01 - Dicionários]]]></title>
<link>http://fredpolicarpo.wordpress.com/2008/04/28/colecoes-case-insensitive-parte-01-dicionarios/</link>
<pubDate>Mon, 28 Apr 2008 02:28:46 +0000</pubDate>
<dc:creator>Frederico Policarpo Martins</dc:creator>
<guid>http://fredpolicarpo.wordpress.com/2008/04/28/colecoes-case-insensitive-parte-01-dicionarios/</guid>
<description><![CDATA[Certa vez me deparei com o problema de criar dicionários onde as chaves fossem Case-Insensitive, ist]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p class="western" lang="pt-PT" align="justify"><img class="aligncenter" src="http://fredpolicarpo.wordpress.com/files/2008/04/duvida.jpg" alt="Como usar dicionários Case-Insensitive" /></p>
<p class="western" lang="pt-PT" align="justify">
<p class="western" lang="pt-PT" align="justify"><span style="font-family:Arial,sans-serif;"><span style="font-size:small;">Certa vez me deparei com o problema de criar dicionários onde as chaves fossem <strong>Case-Insensitive</strong>, isto é, dicionários onde a chave &#8220;nda&#8221; fosse considerada a mesma chave &#8220;NdA&#8221;.</span></span></p>
<p class="western" align="justify"><span style="font-family:Arial,sans-serif;"><span style="font-size:small;">Existem diversos cenários onde este comportamento <span>é</span> desejável. Imagine, por exemplo, um dicionário que contém o mapeamento <strong>nomeDoCampo</strong> para <strong>ObjetoCampo</strong>, que é usado para representar todos o campos de um objeto formulário.</span></span></p>
<p class="western" align="justify"><span style="font-family:Arial,sans-serif;"><span style="font-size:small;">Se nas regras de negócio o nome do campo for Case-Sensitive, isto é, o campo nomeado &#8220;Campo01&#8243; for considerado diferente do campo nomeado &#8220;CAMPO01&#8243;, não existe segredo, basta usar um Hashtable ou um Dictionary genérico que o problema estará sanado.</span></span></p>
<p class="western" align="justify"><span style="font-family:Arial,sans-serif;"><span style="font-size:small;">Se, pelo contrário, as regras definirem que os nomes de campo &#8220;campo01&#8243; e &#8220;CAMPO01&#8243; devem se tratar do mesmo objeto, então seu dicionário, o qual irá conter esse mapeamento, precisa de um comportamento diferenciado.</span></span></p>
<p class="western" align="justify"><span style="font-family:Arial,sans-serif;"><span style="font-size:small;">Vamos ver como seria o trabalho de verificar se um dado campo, supondo que no nome do campo seja case-insensitive, está presente em um dicionário normal, juntamente com a operação de adição de um novo campo.</span></span></p>
<p class="western" style="background:#ffff99 none repeat scroll 0;"><span style="font-family:Courier New,monospace;"><span style="font-size:small;"><br />
static Hashtable campos = new Hashtable();<br />
static void insiraCampo(string nome, object campo)<br />
{<br />
if (!campoExiste(nome))<br />
campos.Add(nome, campo);<br />
}<br />
static bool campoExiste(string nomeDoCampo)<br />
{<br />
foreach (DictionaryEntry entrada in campos)<br />
{<br />
if (entrada.Key.ToString().ToUpper().Equals(nomeDoCampo.ToUpper()))<br />
return true;<br />
}<br />
return false;<br />
}</span></span></p>
<p class="western" lang="pt-PT"><span style="font-family:Arial,sans-serif;"><span style="font-size:small;">Veja o mesmo exemplo onde a variável campos é um dicionário Case-Insensitive</span></span></p>
<p class="western" style="background:#ffff99 none repeat scroll 0;page-break-before:auto;"><span style="font-family:Courier New,monospace;"><span style="font-size:small;">static Hashtable camposInsensitive = CollectionsUtil.CreateCaseInsensitiveHashtable();<br />
static void insiraCampoCaseInsensitive(string nome, object campo)<br />
{<br />
if (!campos.ContainsKey(nome))<br />
campos.Add(nome, campo);<br />
}<br />
/*<br />
O método campoExiste(string nomeDoCampo) não é mais necessário, basta invocar campos.ContainsKey(nomeDoCampo) para obter o resultado.<br />
*/</span></span></p>
<p class="western" lang="pt-PT" align="justify"><span style="font-family:Arial,sans-serif;"><span style="font-size:small;">O ganho não é apenas na menor quantidade de linhas de código e de um melhor aproveitamento da API .NET, uma das principais vantagens é também o desempenho.</span></span></p>
<p class="western"><span style="font-family:Arial,sans-serif;"><span style="font-size:small;">Vejam abaixo as diferenças entre os tempos de inserção usando as duas formas:</span></span></p>
<table border="1" cellspacing="0" cellpadding="4" width="100%">
<col width="27*"></col>
<col width="97*"></col>
<col width="30*"></col>
<col width="26*"></col>
<col width="39*"></col>
<col width="36*"></col>
<tbody>
<tr valign="top">
<td colspan="2" width="48%">
<p class="western"><span style="font-family:Arial,sans-serif;"><span style="font-size:small;"><strong>Quantidade 			de Itens Inseridos</strong></span></span></p>
</td>
<td width="12%">
<p class="western"><span style="font-family:Arial,sans-serif;"><span style="font-size:small;">100</span></span></p>
</td>
<td width="10%">
<p class="western"><span style="font-family:Arial,sans-serif;"><span style="font-size:small;">1000</span></span></p>
</td>
<td width="15%">
<p class="western"><span style="font-family:Arial,sans-serif;"><span style="font-size:small;">5000</span></span></p>
</td>
<td width="14%">
<p class="western"><span style="font-family:Arial,sans-serif;"><span style="font-size:small;">10000</span></span></p>
</td>
</tr>
<tr valign="top">
<td width="10%">
<p class="western"><span style="font-family:Arial,sans-serif;"><span style="font-size:small;"><strong>Tempo</strong></span></span></p>
</td>
<td width="38%">
<p class="western"><span style="font-family:Arial,sans-serif;"><span style="font-size:small;"><strong>Hashtable 			normal (ms)</strong></span></span></p>
</td>
<td width="12%">
<p class="western"><span style="font-family:Arial,sans-serif;"><span style="font-size:small;">156250 </span></span></p>
</td>
<td width="10%">
<p class="western"><span style="font-family:Arial,sans-serif;"><span style="font-size:small;">650000</span></span></p>
</td>
<td width="15%">
<p class="western"><span style="font-family:Arial,sans-serif;"><span style="font-size:small;">196093750 </span></span></p>
</td>
<td width="14%">
<p class="western"><span style="font-family:Arial,sans-serif;"><span style="font-size:small;">930468750</span></span></p>
</td>
</tr>
<tr valign="top">
<td width="10%">
<p class="western"><span style="font-family:Arial,sans-serif;"><span style="font-size:small;"><strong>Tempo </strong></span></span></p>
</td>
<td width="38%">
<p class="western"><span style="font-family:Arial,sans-serif;"><span style="font-size:small;"><strong>Hashtable 			Case-Insensitive(ms) </strong></span></span></p>
</td>
<td width="12%">
<p class="western"><span style="font-family:Arial,sans-serif;"><span style="font-size:small;">0</span></span></p>
</td>
<td width="10%">
<p class="western"><span style="font-family:Arial,sans-serif;"><span style="font-size:small;">0</span></span></p>
</td>
<td width="15%">
<p class="western"><span style="font-family:Arial,sans-serif;"><span style="font-size:small;">0</span></span></p>
</td>
<td width="14%">
<p class="western"><span style="font-family:Arial,sans-serif;"><span style="font-size:small;">312500</span></span></p>
</td>
</tr>
</tbody>
</table>
<p class="western"><span style="font-family:Arial,sans-serif;"><span style="font-size:small;">Baixe o código de testes <a title="Código Fonte do Teste" href="http://estudosdotnet.googlecode.com/files/TestesDicionarioCaseInsensitive.zip">clicando aqui</a>.</span></span></p>
<p class="western"><span style="font-family:Arial,sans-serif;"><span style="font-size:small;">Configurações da máquina de Testes:</span></span></p>
<ul>
<li>
<p class="western"><span style="font-family:Arial,sans-serif;"><span style="font-size:small;">1.75 	GB de Memória RAM</span></span></p>
</li>
<li>
<p class="western"><span style="font-family:Arial,sans-serif;"><span style="font-size:small;">Processador 	AMD Athlon 64 x2 &#8211; Dual Core Processor TK-53</span></span></p>
</li>
</ul>
<p class="western" style="background:#ffff99 none repeat scroll 0;"><span style="font-family:Courier New,monospace;"><span style="font-size:small;"><br />
// Forma padrão de se criar um Hashtable Case Insensitive<br />
Hashtable insensitive = <strong>CollectionsUtil.CreateCaseInsensitiveHashtable()</strong>;<br />
/*<br />
Criação de um Hashtable Case Insensitive informando o número máximo de  entradas que o objeto suporta.<br />
*/<br />
Hashtable insensitive2 = <strong>CollectionsUtil.CreateCaseInsensitiveHashtable(1000)</strong>;<br />
/*<br />
Criação de um Hashtable Case Insensitive baseado em um Dicionário existente<br />
o dicionário recebido com argumento é não-genérico, mas caso deseje realizar essa operação com um dicionário genérico basta fazer o cast que funcionará corretamente.<br />
*/<br />
IDictionary&#60;object, string&#62; dicionario = new Dictionary&#60;object, string&#62;();<br />
dicionario.Add(&#8220;chave01&#8243;, &#8220;Qualquer coisa&#8221;);<br />
dicionario.Add(&#8220;Chave01&#8243;, &#8220;Outra Coisa&#8221;);<br />
dicionario.Add(&#8220;chave02&#8243;, &#8220;Qualquer coisa denovo&#8221;);<br />
dicionario.Add(&#8220;Chave02&#8243;, &#8220;Mais uma coisa&#8221;);<br />
// Dispara um ArgumentException<br />
Hashtable insensitive3 = <strong>CollectionsUtil.CreateCaseInsensitiveHashtable(dicionario as IDictionary)</strong>;</span></span></p>
<p class="western"><span style="font-family:Arial,sans-serif;"><span style="font-size:small;">No próximo post irei falar um pouco sobre a manipulação Case-Insensitive de outros tipos de Coleções.</span></span></p>
<p class="western"><span style="font-family:Arial,sans-serif;"><span style="font-size:small;">Espero ter contribuído, e fiquem a vontade para comentar e questionar sobre este <span>post</span>!</span></span></p>
<p class="western"><span style="font-family:Arial,sans-serif;"><span style="font-size:small;">Abraços</span></span></p>
<p class="western" style="margin-bottom:0;">
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[NotSupportedException, NotImplementedException e a Task List]]></title>
<link>http://lorenzeto.com/2008/01/07/notsupportedexception-notimplementedexception-e-a-task-list/</link>
<pubDate>Mon, 07 Jan 2008 14:00:36 +0000</pubDate>
<dc:creator>raphaabreu</dc:creator>
<guid>http://lorenzeto.com/2008/01/07/notsupportedexception-notimplementedexception-e-a-task-list/</guid>
<description><![CDATA[Para os que já viram as duas classes, a diferença entre elas é algo um tanto confuso: A NotSupported]]></description>
<content:encoded><![CDATA[Para os que já viram as duas classes, a diferença entre elas é algo um tanto confuso: A NotSupported]]></content:encoded>
</item>

</channel>
</rss>
