<?xml version="1.0" encoding="UTF-8"?>
<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/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Gabriel Rodriguez Plancarte &#187; C#</title>
	<atom:link href="http://gabrielrodriguez.net/tag/c/feed/" rel="self" type="application/rss+xml" />
	<link>http://gabrielrodriguez.net</link>
	<description>Tecnologia, Diseño, Negocios y Desarrollo</description>
	<lastBuildDate>Mon, 29 Mar 2010 07:58:45 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Como formatear una cantidad a currency en .NET controlando el numero de decimales</title>
		<link>http://gabrielrodriguez.net/como-formatear-una-cantidad-a-currency-en-net-controlando-el-numero-de-decimales/</link>
		<comments>http://gabrielrodriguez.net/como-formatear-una-cantidad-a-currency-en-net-controlando-el-numero-de-decimales/#comments</comments>
		<pubDate>Sun, 14 Feb 2010 19:08:44 +0000</pubDate>
		<dc:creator>Gabriel</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://gabrielrodriguez.net/?p=701</guid>
		<description><![CDATA[Tantas opciones que hay para formatear strings en.NET, que es difícil memorizar todas.
Hoy tuve que formatear una cifra numérica que en la base de datos está como decimal, pero en el UI no quería desplegar ninguno de los decimales. Casi todo el mundo ha utilizado el string.Format(&#8220;{0:C&#8221;), el cual formatearía como si la cantidad fuera [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_381" class="wp-caption alignnone" style="width: 250px"><a href="http://gabrielrodriguez.net/wp-content/uploads/2009/07/net-logo.png"><img class="size-full wp-image-381" title=".NET" src="http://gabrielrodriguez.net/wp-content/uploads/2009/07/net-logo.png" alt="" width="240" height="74" /></a><p class="wp-caption-text">.NET</p></div>
<p>Tantas opciones que hay para <strong>formatear strings en.NET</strong>, que es difícil memorizar todas.</p>
<p>Hoy tuve que <strong>formatear una cifra numérica</strong> que en la base de datos está como <strong>decimal</strong>, pero <strong>en el UI no quería desplegar ninguno de los decimales</strong>. Casi todo el mundo ha utilizado el <strong>string.Format(&#8220;{0:C&#8221;)</strong>, el cual formatearía como si la cantidad fuera una <strong>cifra monetaria</strong>, pero eso implica tener decimales.</p>
<p>Algua persona <strong>podría pensar en realizar esto desde el stored procedure</strong> o el query que trae la información, pero personalmente<strong> creo que eso es un error</strong>, ya que <strong>los datos deben estar siempre  intactos</strong> y <strong>lo unico que debemos modificar es el formato </strong>en el que los queremos desplegar. Además, eso implicaría tener que estar controlando también el formato del símbolo separador de miles. Esto es algo que simplemente no se debe hacer en base de datos.</p>
<p>Googleando, encontré en los forums de ASP.NET<strong> la siguiente manera de hacerlo, pero tampoco es la más correcta</strong>:</p>
<pre class="brush: csharp;">

System.Globalization.NumberFormatInfo nfi = new System.Globalization.NumberFormatInfo();
nfi.CurrencyDecimalDigits = 0;
nfi.CurrencySymbol =&quot;$&quot;;
myLabel.Text =string.Format(nfi,&quot;{0:C}&quot;, ad.Price);
</pre>
<p>Ya que estoy utilizando esto en un control Repeater, tendría que crear un método con las primeras 3 líneas de texto anteriores, y eso implicaría estar generando varias instancias de NumberFormatInfo.</p>
<p>Para ya no hacer más largo este post, <strong>les dejo la solución correcta</strong>.</p>
<pre class="brush: csharp;">

string.Format(&quot;0:C0&quot;, ad.Price);
</pre>
<p>Así de sencillo&#8230;y no lo especifican en ningun lugar de MSDN&#8230;lo vine a encontrar aqui: <a title=".NET Format String 101" href="http://blogs.msdn.com/kathykam/archive/2006/03/29/564426.aspx">.NET Format String 101</a>. Obvio decirlo, basta cambiar el C0 por C1, C2, C3 o Cx para<strong> determinar el número de decimales que queremos desplegar</strong>. Esto también hace mucho más facil <strong>poner ese format string en el archivo de configuración y poder reutilizarlo</strong> en varias pantallas sin tener que estar cambiando código.</p>
<p>Les dejo también otra buena referencia de string.Format: <a title="String Formatting in C#" href="http://blog.stevex.net/string-formatting-in-csharp/">String Formatting in C#</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gabrielrodriguez.net/como-formatear-una-cantidad-a-currency-en-net-controlando-el-numero-de-decimales/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aplicar formatos condicionales a numeros con string.Format</title>
		<link>http://gabrielrodriguez.net/aplicar-formatos-condicionales-a-numeros-con-string-format/</link>
		<comments>http://gabrielrodriguez.net/aplicar-formatos-condicionales-a-numeros-con-string-format/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 06:13:10 +0000</pubDate>
		<dc:creator>Gabriel</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://gabrielrodriguez.net/?p=693</guid>
		<description><![CDATA[Esto es algo que descubrí hoy referente a formateo de números en .NET y que por más simple que parezca, tiene mucha utilidad, ya que puede reducir un bloque de 3 o 6 líneas de código, a una sola línea.
En lugar de necesitar varios if&#8217;s para evaluar el valor del número que vamos a formatear [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_381" class="wp-caption alignnone" style="width: 250px"><a href="http://gabrielrodriguez.net/wp-content/uploads/2009/07/net-logo.png"><img class="size-full wp-image-381" title=".NET" src="http://gabrielrodriguez.net/wp-content/uploads/2009/07/net-logo.png" alt="" width="240" height="74" /></a><p class="wp-caption-text">.NET</p></div>
<p>Esto es algo que descubrí hoy referente a <strong>formateo de números en .NET</strong> y que por más simple que parezca, tiene mucha utilidad, ya que puede reducir un bloque de 3 o 6 líneas de código, a una sola línea.</p>
<p>En lugar de necesitar varios if&#8217;s para evaluar el valor del número que vamos a formatear y poder determinar el formato que se va a aplicar (desplegar el número entre paréntesis si es negativo, desplegar la palabra Cero si el número es 0, etc), se puede hacer todo el una sola línea, ya que el metodo <strong>ToString()</strong> permite formatos condicionales de 2 o 3 condiciones&#8230;es decir, podemos hacer esto:</p>
<pre class="brush: csharp;">

const string formato = &quot;000;(##);Cero&quot;;

 Console.WriteLine(7.ToString(formato)); // va a desplegar &quot;007&quot;
 Console.WriteLine((-5).ToString(formato)); // va a desplegar &quot;(5)&quot;
 Console.WriteLine(0.ToString(formato)); // va a desplegar &quot;Cero&quot;
</pre>
<div id="attachment_695" class="wp-caption alignnone" style="width: 357px"><img class="size-full wp-image-695" title="Formatos condicionales en .NET usando ToString()" src="http://gabrielrodriguez.net/wp-content/uploads/2010/01/net-formatos-condicionales-strings.png" alt="Formatos condicionales en .NET usando ToString()" width="347" height="129" /><p class="wp-caption-text">Formatos condicionales en .NET usando ToString()</p></div>
<p>El formato entonces es: <strong> &#8220;positivo;negativo;cero&#8221;</strong>.</p>
<p>También es posible especificar solo el formato positivo y negativo.</p>
<p>Espero les sirva.</p>
]]></content:encoded>
			<wfw:commentRss>http://gabrielrodriguez.net/aplicar-formatos-condicionales-a-numeros-con-string-format/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Usar el operator ternario de C# con nullables</title>
		<link>http://gabrielrodriguez.net/usar-el-operator-ternario-de-c-con-nullables/</link>
		<comments>http://gabrielrodriguez.net/usar-el-operator-ternario-de-c-con-nullables/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 07:39:15 +0000</pubDate>
		<dc:creator>Gabriel</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://gabrielrodriguez.net/?p=677</guid>
		<description><![CDATA[Todos los días se aprende algo&#8230;
Desde hace mucho tenemos disponible el operador ternario (o condicional) en C#, también conocido como el operador &#8220;?&#8220;.
El operador ternario sirve para regresar/usar uno de dos posibles valores, dependiendo de una condición boleana.
La estructura es:
condicion-boleana ? valor-si-se-cumple : valor-si-no-se-cumple
Es decir, permite reducir de esto:


int? myVar; //variable int nullable

if(string.IsNullOrEmpty(textbox1.Text))

{ myVar = [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_381" class="wp-caption alignnone" style="width: 250px"><img class="size-full wp-image-381" title=".NET" src="http://gabrielrodriguez.net/wp-content/uploads/2009/07/net-logo.png" alt=".NET" width="240" height="74" /><p class="wp-caption-text">.NET</p></div>
<p>Todos los días se aprende algo&#8230;</p>
<p>Desde hace mucho tenemos disponible el <a title="Operador Ternario o condicional en C#" href="http://msdn.microsoft.com/en-us/library/ty67wk28.aspx"><strong>operador ternario (o condicional) en C#</strong></a>, también conocido como el operador &#8220;<strong>?</strong>&#8220;.</p>
<p>El operador ternario <strong>sirve para regresar/usar uno de dos posibles valores, dependiendo de una condición boleana</strong>.</p>
<p>La estructura es:</p>
<p><strong>condicion-boleana ? valor-si-se-cumple : valor-si-no-se-cumple</strong></p>
<p>Es decir, permite reducir de esto:</p>
<pre class="brush: csharp;">

int? myVar; //variable int nullable

if(string.IsNullOrEmpty(textbox1.Text))

{ myVar = null; }

else

{ myVar = Convert.ToInt32(textbox1.Text); }
</pre>
<p>a esto:</p>
<pre class="brush: csharp;">

myVar =string.IsNullOrEmpty(textbox1.Text) ? null : Convert.ToInt32(textbox1.Text);
</pre>
<p>Y uno esperaría que el código del segundo bloque compile, pero no es así. En lugar de que funcione, el compilador nos marca el siguiente error:</p>
<p><strong> Type of conditional expression cannot be determined because there is no implicit conversion between &#8216;&lt;null&gt;&#8217; and &#8216;int&#8217; </strong></p>
<p>Yo llevaba años usando el operador ternario y siempre me pareció ilógico que no se permitiera esto. Y probablemente fue más ilógico el hecho de nunca haber googleado como solucionar esto..ya que la solución es simple.</p>
<pre class="brush: csharp;">

myVar =string.IsNullOrEmpty(textbox1.Text) ? (int?)null : Convert.ToInt32(textbox1.Text);
</pre>
<p>o</p>
<pre class="brush: csharp;">

myVar =string.IsNullOrEmpty(textbox1.Text) ? null : (int?)Convert.ToInt32(textbox1.Text);
</pre>
<p>Simple&#8230;el compilador tenía razon. No hay una conversión implícita entre null e int, <strong>pero sí entre null y Nullable&lt;int&gt; (a.k.a. int?)</strong>. Casteando cualquiera de los lados de la expresión, va a compilar sin problemas.</p>
<p>Espero les sirva.</p>
]]></content:encoded>
			<wfw:commentRss>http://gabrielrodriguez.net/usar-el-operator-ternario-de-c-con-nullables/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>E-book (libro) gratis de C#</title>
		<link>http://gabrielrodriguez.net/e-book-libro-gratis-de-c/</link>
		<comments>http://gabrielrodriguez.net/e-book-libro-gratis-de-c/#comments</comments>
		<pubDate>Sat, 11 Apr 2009 02:09:30 +0000</pubDate>
		<dc:creator>Gabriel</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[.NET Reflector]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Ebooks]]></category>
		<category><![CDATA[Libros]]></category>
		<category><![CDATA[RedGate]]></category>

		<guid isPermaLink="false">http://gabrielrodriguez.net/?p=236</guid>
		<description><![CDATA[La compañia RedGate, que creó los increíbles productos SQL Compare y SQL Prompt, entre otros, publicó esta semana un ebook (o libro electronico) de C# llamado Illustrated C# 2008, que está enfocado a desarrolladores completamente nuevos o que tienen un background de C++ o VB y que quieren migrar a C#.
RedGate es la misma compañía [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_237" class="wp-caption alignnone" style="width: 120px"><img class="size-full wp-image-237" title="Illustrated C# 2008" src="http://gabrielrodriguez.net/wp-content/uploads/2009/04/illustratedcsharp.gif" alt="Ebook gratis de C# - Illustrated C# 2008" width="110" height="144" /><p class="wp-caption-text">Ebook gratis de C# - Illustrated C# 2008</p></div>
<p>La compañia <strong>RedGate</strong>, que creó los increíbles productos <a title="SQL Compare - Red Gate - Producto comparar bases de datos de SQL" href="http://www.red-gate.com/products/SQL_Compare/index.htm">SQL Compare</a> y <a title="SQL Prompt - Red Gate - Producto para tener Intellisense o Autocomplete en SQL Server" href="http://www.red-gate.com/products/SQL_Prompt/index.htm">SQL Prompt</a>, entre otros, <strong>publicó esta semana un ebook</strong> (o libro electronico) de C# llamado <strong>Illustrated C# 2008</strong>, que está <strong>enfocado a desarrolladores completamente nuevos o que tienen un background de C++ o VB </strong>y que quieren migrar a C#.</p>
<p><strong>RedGate</strong> es la misma compañía que ahora es dueña del <a title=".NET Reflector by Red Gate" href="http://www.red-gate.com/products/reflector/index.htm">.NET Reflector</a>, creado originalmente por <a title="Lutz Roeder" href="http://www.lutzroeder.com/">Lutz Roeder</a>.</p>
<p>El autor del ebook es <strong>Daniel Solis</strong>.</p>
<p><a title="Illustrated C# 2008" href="http://www.red-gate.com/products/ants_profiler/boost_app_performance_ebook5.htm?utm_source=infoq&amp;utm_medium=textad&amp;utm_term=1506&amp;utm_content=boostappperf-ebook2&amp;utm_campaign=antsprofiler">Pagina del Ebook Ilustrated C# 2008</a></p>
<p><a title="Ilustrated C# 2008 Ebook Download" href="http://downloads.red-gate.com/ebooks/DotNet/illustratedcsharp2008.zip">Link directo a bajar el Ebook Ilustrated C# 2008</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gabrielrodriguez.net/e-book-libro-gratis-de-c/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Usar solamente string.Format para unir strings y variables</title>
		<link>http://gabrielrodriguez.net/usar-solamente-stringformat-para-unir-strings-y-variables/</link>
		<comments>http://gabrielrodriguez.net/usar-solamente-stringformat-para-unir-strings-y-variables/#comments</comments>
		<pubDate>Thu, 12 Feb 2009 07:33:24 +0000</pubDate>
		<dc:creator>Gabriel</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Mejores Practicas]]></category>

		<guid isPermaLink="false">http://gabrielrodriguez.net/?p=150</guid>
		<description><![CDATA[Los desarrolladores que apenas vayan empezando, acostúmbrense a usar el método string.Format en lugar de estar concatenando strings y variables!!
Incluso varios desarrolladores avanzados siguen concatenando en lugar de usar string.Format(), lo cual definitivamente hace mucho más difícil que los desarrolladores principiantes se acostumbren a seguir estándares y Mejores Practicas.
La sintaxis para usarlo es de lo [...]]]></description>
			<content:encoded><![CDATA[<p>Los desarrolladores que apenas vayan empezando, <strong>acostúmbrense a usar el método string.Format en lugar de estar concatenando strings y variables</strong>!!</p>
<p>Incluso varios desarrolladores avanzados siguen concatenando en lugar de usar string.Format(), lo cual definitivamente hace mucho más difícil que los desarrolladores principiantes se acostumbren a seguir estándares y Mejores Practicas.</p>
<p>La sintaxis para usarlo es de lo más simple, y además <strong>hace la línea de código muchísimo más legible</strong>, por ejemplo:</p>
<p><code>
<pre class="brush: csharp;">labelMensaje.Text = &quot;El usuario &quot; + userName + &quot; realizo el pedido &quot; + numPedido + &quot; el dia &quot; + DateTime.Now.ToString();</pre>
<p></code></p>
<p>Odio ver ese tipo de líneas de código, cuando se puede tener algo tan sencillo como esto:</p>
<p><code>
<pre class="brush: csharp;">labelMensaje.Text = string.Format(&quot;El usuario {0} realizo el pedido {1} el dia {2}&quot;, userName, numPedido, DateTime.Now);</pre>
<p></code></p>
<p>Si la legibilidad no es suficiente mejora, también hay que notar que escribir todo el mensaje en un solo string <strong>evita posibles errores de falta de espacios entre palabras y variables</strong>, lo cual es muy común que suceda cuando se concatenan variables, es muy fácil que se coman el espacio al terminar un string antes de concatenar, o al iniciar el string después de haber concatenado.</p>
]]></content:encoded>
			<wfw:commentRss>http://gabrielrodriguez.net/usar-solamente-stringformat-para-unir-strings-y-variables/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
