<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Commentaires sur : Switch sur un type en C#</title>
	<atom:link href="http://codingly.com/2009/10/19/switch-sur-un-type-en-c/feed/" rel="self" type="application/rss+xml" />
	<link>http://codingly.com/2009/10/19/switch-sur-un-type-en-c/</link>
	<description>Par Romain Verdier</description>
	<lastBuildDate>Fri, 27 Jan 2012 10:54:54 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
	<item>
		<title>Par : Jocelyn</title>
		<link>http://codingly.com/2009/10/19/switch-sur-un-type-en-c/#comment-735</link>
		<dc:creator><![CDATA[Jocelyn]]></dc:creator>
		<pubDate>Fri, 16 Jul 2010 13:53:21 +0000</pubDate>
		<guid isPermaLink="false">http://codingly.com/?p=872#comment-735</guid>
		<description><![CDATA[Effectivement tout s&#039;éclaire, et ce @this est une convention tout à fait intéressante qui méritait d&#039;être mise en valeur. 
Merci beaucoup pour cette réponse si rapide ! :-)

Dans l&#039;attente de lire le prochain post sicharpien !]]></description>
		<content:encoded><![CDATA[<p>Effectivement tout s&#8217;éclaire, et ce @this est une convention tout à fait intéressante qui méritait d&#8217;être mise en valeur.<br />
Merci beaucoup pour cette réponse si rapide ! :-)</p>
<p>Dans l&#8217;attente de lire le prochain post sicharpien !</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Romain Verdier</title>
		<link>http://codingly.com/2009/10/19/switch-sur-un-type-en-c/#comment-734</link>
		<dc:creator><![CDATA[Romain Verdier]]></dc:creator>
		<pubDate>Fri, 16 Jul 2010 08:37:28 +0000</pubDate>
		<guid isPermaLink="false">http://codingly.com/?p=872#comment-734</guid>
		<description><![CDATA[Le @ est utilisable en C# pour les &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/aa691090%28VS.71%29.aspx&quot; rel=&quot;nofollow&quot;&gt;verbatim strings&lt;/a&gt;, mais également pour échapper les mots clés du langage et les utiliser comme identifiers (&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/aa664670%28VS.71%29.aspx&quot; rel=&quot;nofollow&quot;&gt;verbatim identifiers&lt;/a&gt;). Dans cet exemple, il me permet d&#039;utiliser &lt;code&gt;this&lt;/code&gt; comme nom de paramètre alors qu&#039;il s&#039;agit d&#039;un mot clé. C&#039;est une convention que j&#039;utilise pour identifier visuellement le premier paramètre un peu spécial des méthodes d&#039;extensions. Il va sans dire qu&#039;il est tout à fait possible de le nommer autrement...

Quant aux méthodes de &lt;code&gt;SwitchExtensions&lt;/code&gt;, elles permettent ici de gérer le cas où &lt;code&gt;@this&lt;/code&gt; est &lt;code&gt;null&lt;/code&gt;, justement. Les appels à la méthode &lt;code&gt;Case&lt;/code&gt; sont voués à être chainés, or cette dernière retourne &lt;code&gt;null&lt;/code&gt; lorsqu&#039;une correspondance est trouvée pour sortir du switch.]]></description>
		<content:encoded><![CDATA[<p>Le @ est utilisable en C# pour les <a href="http://msdn.microsoft.com/en-us/library/aa691090%28VS.71%29.aspx" rel="nofollow">verbatim strings</a>, mais également pour échapper les mots clés du langage et les utiliser comme identifiers (<a href="http://msdn.microsoft.com/en-us/library/aa664670%28VS.71%29.aspx" rel="nofollow">verbatim identifiers</a>). Dans cet exemple, il me permet d&#8217;utiliser <code>this</code> comme nom de paramètre alors qu&#8217;il s&#8217;agit d&#8217;un mot clé. C&#8217;est une convention que j&#8217;utilise pour identifier visuellement le premier paramètre un peu spécial des méthodes d&#8217;extensions. Il va sans dire qu&#8217;il est tout à fait possible de le nommer autrement&#8230;</p>
<p>Quant aux méthodes de <code>SwitchExtensions</code>, elles permettent ici de gérer le cas où <code>@this</code> est <code>null</code>, justement. Les appels à la méthode <code>Case</code> sont voués à être chainés, or cette dernière retourne <code>null</code> lorsqu&#8217;une correspondance est trouvée pour sortir du switch.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Jocelyn</title>
		<link>http://codingly.com/2009/10/19/switch-sur-un-type-en-c/#comment-733</link>
		<dc:creator><![CDATA[Jocelyn]]></dc:creator>
		<pubDate>Fri, 16 Jul 2010 08:05:34 +0000</pubDate>
		<guid isPermaLink="false">http://codingly.com/?p=872#comment-733</guid>
		<description><![CDATA[Hello,

Ayant appris à utiliser yield grâce à un post précédent, j&#039;accorde le plus grand intérêt aux solutions proposées par Romain. :-)

Toutefois, 2 choses m&#039;échappent dans cette suggestion :

1°) L&#039;arobase qui préfixe le nom du paramètre @this a-t-il une signification particulière dans le langage, ou bien est-ce simplement un caractère légal comme un autre pour nommer un paramètre, et c&#039;est juste que je l&#039;ignorais ?

2°) Pourquoi avoir créé une seconde classe SwitchExtensions pour étendre la classe Switch plutôt que de pourvoir directement celle-ci des méthodes Case et Default (et travailler directement avec le &quot;vrai&quot; this) ?

Merci d&#039;avance pour les éclaircissements ! :-)]]></description>
		<content:encoded><![CDATA[<p>Hello,</p>
<p>Ayant appris à utiliser yield grâce à un post précédent, j&#8217;accorde le plus grand intérêt aux solutions proposées par Romain. :-)</p>
<p>Toutefois, 2 choses m&#8217;échappent dans cette suggestion :</p>
<p>1°) L&#8217;arobase qui préfixe le nom du paramètre @this a-t-il une signification particulière dans le langage, ou bien est-ce simplement un caractère légal comme un autre pour nommer un paramètre, et c&#8217;est juste que je l&#8217;ignorais ?</p>
<p>2°) Pourquoi avoir créé une seconde classe SwitchExtensions pour étendre la classe Switch plutôt que de pourvoir directement celle-ci des méthodes Case et Default (et travailler directement avec le &#8220;vrai&#8221; this) ?</p>
<p>Merci d&#8217;avance pour les éclaircissements ! :-)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Romain Verdier</title>
		<link>http://codingly.com/2009/10/19/switch-sur-un-type-en-c/#comment-729</link>
		<dc:creator><![CDATA[Romain Verdier]]></dc:creator>
		<pubDate>Fri, 18 Jun 2010 09:58:56 +0000</pubDate>
		<guid isPermaLink="false">http://codingly.com/?p=872#comment-729</guid>
		<description><![CDATA[Haha...]]></description>
		<content:encoded><![CDATA[<p>Haha&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : il mahboul</title>
		<link>http://codingly.com/2009/10/19/switch-sur-un-type-en-c/#comment-728</link>
		<dc:creator><![CDATA[il mahboul]]></dc:creator>
		<pubDate>Fri, 18 Jun 2010 09:49:03 +0000</pubDate>
		<guid isPermaLink="false">http://codingly.com/?p=872#comment-728</guid>
		<description><![CDATA[utilisez la reflexion pour instancier les objets dans leurs propre type, en c# 4.0 dynamic rafle la mise  ;
 
[sourcecode language=&quot;csharp&quot;]
 if (this.GetType().GetProperties().Count() &gt; 0)
                foreach (PropertyInfo p in this.GetType().GetProperties())
                {
                    Object result = p.GetValue(this, null);

                    if (result == null)
                    {
                        p.SetValue(this, createNodeInstance(Assembly.GetAssembly(p.PropertyType), p.PropertyType.FullName), null);
                        switch (Assembly.GetAssembly(p.PropertyType).GetName().Name)
                        {
                            case &quot;ModelObject&quot;: 
                                Object newObject = createNodeInstance(Assembly.GetAssembly(p.PropertyType), p.PropertyType.FullName);
                                p.SetValue(this, newObject, null);
                               
                            default: break;
                        }
                    }
                }
[/sourcecode]]]></description>
		<content:encoded><![CDATA[<p>utilisez la reflexion pour instancier les objets dans leurs propre type, en c# 4.0 dynamic rafle la mise  ;</p>
<pre class="brush: csharp;">
 if (this.GetType().GetProperties().Count() &amp;gt; 0)
                foreach (PropertyInfo p in this.GetType().GetProperties())
                {
                    Object result = p.GetValue(this, null);

                    if (result == null)
                    {
                        p.SetValue(this, createNodeInstance(Assembly.GetAssembly(p.PropertyType), p.PropertyType.FullName), null);
                        switch (Assembly.GetAssembly(p.PropertyType).GetName().Name)
                        {
                            case &quot;ModelObject&quot;:
                                Object newObject = createNodeInstance(Assembly.GetAssembly(p.PropertyType), p.PropertyType.FullName);
                                p.SetValue(this, newObject, null);

                            default: break;
                        }
                    }
                }
</pre>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Pistache</title>
		<link>http://codingly.com/2009/10/19/switch-sur-un-type-en-c/#comment-468</link>
		<dc:creator><![CDATA[Pistache]]></dc:creator>
		<pubDate>Fri, 11 Dec 2009 15:31:20 +0000</pubDate>
		<guid isPermaLink="false">http://codingly.com/?p=872#comment-468</guid>
		<description><![CDATA[Romain est moche.]]></description>
		<content:encoded><![CDATA[<p>Romain est moche.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Simon Mourier</title>
		<link>http://codingly.com/2009/10/19/switch-sur-un-type-en-c/#comment-461</link>
		<dc:creator><![CDATA[Simon Mourier]]></dc:creator>
		<pubDate>Mon, 02 Nov 2009 15:13:17 +0000</pubDate>
		<guid isPermaLink="false">http://codingly.com/?p=872#comment-461</guid>
		<description><![CDATA[Oulaaa vous avez dû avoir une enfance torturée pour inventer des trucs pareils :) Mais au moins, c&#039;est assumé!]]></description>
		<content:encoded><![CDATA[<p>Oulaaa vous avez dû avoir une enfance torturée pour inventer des trucs pareils :) Mais au moins, c&#8217;est assumé!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : Jérémy</title>
		<link>http://codingly.com/2009/10/19/switch-sur-un-type-en-c/#comment-457</link>
		<dc:creator><![CDATA[Jérémy]]></dc:creator>
		<pubDate>Wed, 28 Oct 2009 15:38:39 +0000</pubDate>
		<guid isPermaLink="false">http://codingly.com/?p=872#comment-457</guid>
		<description><![CDATA[Tu pousses la remarque à son exagération, ton exemple est évident.

Mais je pense qu&#039;en restant dans un contexte de swicth/case, l&#039;argument de la lisibilité est valable. On parle d&#039;une logique &quot;basique&quot;, contrairement à l&#039;exemple de la méthode &quot;IsPrime&quot;.

De la même manière pour un swicth/case un nombre limité de cas, et avec des opérations relativement simple, le &quot;if-is-cast&quot; sera plus facile à comprendre.

Cependant, avec la même construction mais un nombre plus conséquent de cas, et des opération plus complexe pour chacun des cas, ta solution prouve toute son utilité.

Pour moi ça reste une question de contexte dans le code.]]></description>
		<content:encoded><![CDATA[<p>Tu pousses la remarque à son exagération, ton exemple est évident.</p>
<p>Mais je pense qu&#8217;en restant dans un contexte de swicth/case, l&#8217;argument de la lisibilité est valable. On parle d&#8217;une logique &#8220;basique&#8221;, contrairement à l&#8217;exemple de la méthode &#8220;IsPrime&#8221;.</p>
<p>De la même manière pour un swicth/case un nombre limité de cas, et avec des opérations relativement simple, le &#8220;if-is-cast&#8221; sera plus facile à comprendre.</p>
<p>Cependant, avec la même construction mais un nombre plus conséquent de cas, et des opération plus complexe pour chacun des cas, ta solution prouve toute son utilité.</p>
<p>Pour moi ça reste une question de contexte dans le code.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : grozeille</title>
		<link>http://codingly.com/2009/10/19/switch-sur-un-type-en-c/#comment-451</link>
		<dc:creator><![CDATA[grozeille]]></dc:creator>
		<pubDate>Sat, 24 Oct 2009 08:27:43 +0000</pubDate>
		<guid isPermaLink="false">http://codingly.com/?p=872#comment-451</guid>
		<description><![CDATA[J&#039;ai rien compris concernant le pingouin...]]></description>
		<content:encoded><![CDATA[<p>J&#8217;ai rien compris concernant le pingouin&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>Par : loic</title>
		<link>http://codingly.com/2009/10/19/switch-sur-un-type-en-c/#comment-448</link>
		<dc:creator><![CDATA[loic]]></dc:creator>
		<pubDate>Wed, 21 Oct 2009 17:36:53 +0000</pubDate>
		<guid isPermaLink="false">http://codingly.com/?p=872#comment-448</guid>
		<description><![CDATA[A mon humble avis, c&#039;est un peu &quot;over-designé&quot; (excus[é] le quebicisme) __mais__ je donne un point pour l&#039;élégance du code et un point pour parce que Romain est beau.

Ceci-dit , quit à imaginer des méthodes élegantes, j&#039;aurai je pense tenté de me débarasser du switch et suivre le conseil avisé : &quot;la première chose qu’il vous faut faire est de vous demander si vous avez besoin de faire un switch sur un type[...]&quot;. (on m&#039;objectera qu&#039;en matiere d&#039;&quot;over design&quot;, contourner un switch aboutit parfois a bien pire que la solution présentée :s)

Ce ceci-dit dit, j&#039;avoue que je ne me serais jamais posé la question de savoir comment j&#039;allais éviter un switch (ou assimilé if..elseif, etc.) par &quot;mon propre switch&quot;, c&#039;est vraiement une belle solution.]]></description>
		<content:encoded><![CDATA[<p>A mon humble avis, c&#8217;est un peu &#8220;over-designé&#8221; (excus[é] le quebicisme) __mais__ je donne un point pour l&#8217;élégance du code et un point pour parce que Romain est beau.</p>
<p>Ceci-dit , quit à imaginer des méthodes élegantes, j&#8217;aurai je pense tenté de me débarasser du switch et suivre le conseil avisé : &#8220;la première chose qu’il vous faut faire est de vous demander si vous avez besoin de faire un switch sur un type[...]&#8220;. (on m&#8217;objectera qu&#8217;en matiere d&#8217;&#8221;over design&#8221;, contourner un switch aboutit parfois a bien pire que la solution présentée :s)</p>
<p>Ce ceci-dit dit, j&#8217;avoue que je ne me serais jamais posé la question de savoir comment j&#8217;allais éviter un switch (ou assimilé if..elseif, etc.) par &#8220;mon propre switch&#8221;, c&#8217;est vraiement une belle solution.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

