<?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>Blog de Matthieu MEZIL &#187; VB</title>
	<atom:link href="https://blog.developpez.com/matthieu/pcategory/net/vb/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/matthieu</link>
	<description></description>
	<lastBuildDate>Fri, 14 Dec 2007 21:05:16 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Article .NET 3.5</title>
		<link>https://blog.developpez.com/matthieu/p4683/net/article_net_3_5</link>
		<comments>https://blog.developpez.com/matthieu/p4683/net/article_net_3_5#comments</comments>
		<pubDate>Fri, 14 Dec 2007 21:05:16 +0000</pubDate>
		<dc:creator><![CDATA[Matthieu MEZIL]]></dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[VB]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Vous trouverez dans le hors série .net de Programmez un article &#171;&#160;Plongée au coeur de .Net 3.5&#8243; co-écrit avec Michel Perfetti. Bonne lecture]]></description>
				<content:encoded><![CDATA[<p>Vous trouverez dans le hors série .net de Programmez un article &laquo;&nbsp;Plongée au coeur de .Net 3.5&Prime; co-écrit avec <a href="http://blogs.codes-sources.com/miiitch/">Michel Perfetti</a>.<br />
Bonne lecture <img src="https://blog.developpez.com/matthieu/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VS 2008 dispo sur msdn !!!</title>
		<link>https://blog.developpez.com/matthieu/p4548/tools/vs_2008_dispo_sur_msdn</link>
		<comments>https://blog.developpez.com/matthieu/p4548/tools/vs_2008_dispo_sur_msdn#comments</comments>
		<pubDate>Mon, 19 Nov 2007 10:07:36 +0000</pubDate>
		<dc:creator><![CDATA[Matthieu MEZIL]]></dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[VB]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[L&#8217;info est énorme !!! VS 2008 est dispo dès à présent. Il faut juste avoir un compte msdn pour cela. Bon téléchargement]]></description>
				<content:encoded><![CDATA[<p>L&rsquo;info est énorme !!!<br />
VS 2008 est dispo dès à présent. Il faut juste avoir un compte msdn pour cela.<br />
Bon téléchargement <img src="https://blog.developpez.com/matthieu/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Rename incomplete</title>
		<link>https://blog.developpez.com/matthieu/p4521/net/rename_incomplete</link>
		<comments>https://blog.developpez.com/matthieu/p4521/net/rename_incomplete#comments</comments>
		<pubDate>Tue, 13 Nov 2007 19:34:12 +0000</pubDate>
		<dc:creator><![CDATA[Matthieu MEZIL]]></dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[VB]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Imaginons le code suivant : int i = 0; #if DEBUG i ++; #else i--; #endif Si je renomme i en j et que je laisse VS le renommer pour moi, j&#8217;obtiens le code suivant : int j = 0; #if DEBUG j ++; #else i--; #endif Je comprends bien la difficulté évoquée par Michael Taylor sur le forum msdn mais je trouve que c&#8217;est regrettable.]]></description>
				<content:encoded><![CDATA[<p>Imaginons le code suivant :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">int i = 0; <br />
#if DEBUG <br />
i ++; <br />
#else <br />
i--; <br />
#endif</div></div>
<p>Si je renomme i en j et que je laisse VS le renommer pour moi, j&rsquo;obtiens le code suivant :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">int j = 0; <br />
#if DEBUG <br />
j ++; <br />
#else <br />
i--; <br />
#endif</div></div>
<p>Je comprends bien la difficulté évoquée par <a href="http://p3net.mvps.org/">Michael Taylor</a> <a href="http://forums.microsoft.com/MSDN/showpost.aspx?postid=2402019&amp;siteid=1&amp;&amp;notification_id=136157&amp;message_id=136157&amp;agent=messenger">sur le forum msdn </a> mais je trouve que c&rsquo;est regrettable.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VB et les Optional</title>
		<link>https://blog.developpez.com/matthieu/p4504/net/vb_et_les_optional</link>
		<comments>https://blog.developpez.com/matthieu/p4504/net/vb_et_les_optional#comments</comments>
		<pubDate>Thu, 08 Nov 2007 07:09:56 +0000</pubDate>
		<dc:creator><![CDATA[Matthieu MEZIL]]></dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[VB]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Les paramètres optional ne peuvent pas être de type structure. Par conséquent, les nullables ne sont pas autorisés]]></description>
				<content:encoded><![CDATA[<p>Les paramètres optional ne peuvent pas être de type structure. Par conséquent, les nullables ne sont pas autorisés <img src="https://blog.developpez.com/matthieu/wp-includes/images/smilies/icon_sad.gif" alt=":(" class="wp-smiley" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LINQ Select VB != Select C# quand on fait un select sur un type anonyme</title>
		<link>https://blog.developpez.com/matthieu/p4379/net/linq_select_vb_select_c_quand_on_fait_un</link>
		<comments>https://blog.developpez.com/matthieu/p4379/net/linq_select_vb_select_c_quand_on_fait_un#comments</comments>
		<pubDate>Sat, 13 Oct 2007 07:48:10 +0000</pubDate>
		<dc:creator><![CDATA[Matthieu MEZIL]]></dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[LINQ]]></category>
		<category><![CDATA[VB]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Imaginons une classe Personne avec plusieurs propriétés telles que le Nom, Prenom, DateNaissance, Adresse, etc. Pour créer un type anonyme en C#, il suffit de faire : new { Nom = p.Nom, Prenom = p.Prenom } Dans ce cas, les noms des propriétés étant les mêmes, on pourra même directement écrire : new { p.Nom, p.Prenom } De la même manière, en VB, il suffit d&#8217;écrire New With { p.Nom, p.Prenom } Si vous voulez [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Imaginons une classe Personne avec plusieurs propriétés telles que le Nom, Prenom, DateNaissance, Adresse, etc.</p>
<p>Pour créer un type anonyme en C#, il suffit de faire :</p>
<p><code class="codecolorer text default"><span class="text">new { Nom = p.Nom, Prenom = p.Prenom }</span></code></p>
<p>Dans ce cas, les noms des propriétés étant les mêmes, on pourra même directement écrire : </p>
<p><code class="codecolorer text default"><span class="text">new { p.Nom, p.Prenom }</span></code></p>
<p>De la même manière, en VB, il suffit d&rsquo;écrire</p>
<p><code class="codecolorer text default"><span class="text">New With { p.Nom, p.Prenom }</span></code></p>
<p>Si vous voulez faire une requête LINQ et ne renvoyer que le nom et le prénom, il faut utiliser un type anonyme.</p>
<p>Fort logiquement, en C#, il faut faire : </p>
<p><code class="codecolorer text default"><span class="text">from p in persons select new {p.Nom, p.Prenom}</span></code></p>
<p>En VB, le type anonyme va être créé pour nous avec l&rsquo;écriture suivante (plus proche du SQL) : </p>
<p><code class="codecolorer text default"><span class="text">from p in persons select p.Nom, p.Prenom</span></code></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LINQ : attention à bien l&#8217;utiliser</title>
		<link>https://blog.developpez.com/matthieu/p4477/net/linq_attention_a_bien_l_utiliser</link>
		<comments>https://blog.developpez.com/matthieu/p4477/net/linq_attention_a_bien_l_utiliser#comments</comments>
		<pubDate>Sat, 03 Nov 2007 20:42:55 +0000</pubDate>
		<dc:creator><![CDATA[Matthieu MEZIL]]></dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[LINQ]]></category>
		<category><![CDATA[VB]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Le défaut de LINQ c&#8217;est qu&#8217;il va devenir beaucoup plus facile de faire du code moins performant. Prenons un exemple : public class Client { &#160; private List&#60;Facture&#62; _factures; &#160; &#160; public string Nom { get; set; } &#160; public string Prenom { get; set; } &#160; public List&#60;Facture&#62; Factures &#160; { &#160; &#160; get &#160; &#160; { &#160; &#160; &#160; if (_factures == null) &#160; &#160; &#160; &#160; _factures = new List&#60;Facture&#62;(); &#160; &#160; [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Le défaut de LINQ c&rsquo;est qu&rsquo;il va devenir beaucoup plus facile de faire du code moins performant.<br />
Prenons un exemple :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">public class Client <br />
{ <br />
&nbsp; private List&lt;Facture&gt; _factures; <br />
&nbsp;<br />
&nbsp; public string Nom { get; set; } <br />
&nbsp; public string Prenom { get; set; } <br />
&nbsp; public List&lt;Facture&gt; Factures <br />
&nbsp; { <br />
&nbsp; &nbsp; get <br />
&nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; if (_factures == null) <br />
&nbsp; &nbsp; &nbsp; &nbsp; _factures = new List&lt;Facture&gt;(); <br />
&nbsp; &nbsp; &nbsp; return _factures; <br />
&nbsp; &nbsp; } <br />
&nbsp; } <br />
} <br />
&nbsp;<br />
public class Facture <br />
{ <br />
&nbsp; private Client _client; <br />
&nbsp;<br />
&nbsp; public Client Client <br />
&nbsp; { <br />
&nbsp; &nbsp; get { return _client; } <br />
&nbsp; &nbsp; set <br />
&nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; if (_client != null) <br />
&nbsp; &nbsp; &nbsp; &nbsp; _client.Factures.Remove(this); <br />
&nbsp; &nbsp; &nbsp; _client = value; <br />
&nbsp; &nbsp; &nbsp; _client.Factures.Add(this); <br />
&nbsp; &nbsp; } <br />
&nbsp; } <br />
&nbsp; public decimal Prix { get; set; } <br />
}</div></div>
<p>Imaginons que l&rsquo;on veuille récupérer les clients ayant dépensé au moins 50 euros en les triant par ordre décroissant de dépense, puis alphabétiquement.</p>
<p>Le code en C# 2.0 pourrait être le suivant :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">List&lt;Client&gt; copyClients = new List&lt;Client&gt;(); <br />
copyClients.AddRange(clients); <br />
&nbsp;<br />
copyClients.Sort(delegate(Client x, Client y) <br />
{ <br />
&nbsp; decimal xFacturesSomme = 0, yFacturesSomme = 0; <br />
&nbsp; foreach (Facture facture in x.Factures) <br />
&nbsp; &nbsp; xFacturesSomme += facture.Prix; <br />
&nbsp; foreach (Facture facture in y.Factures) <br />
&nbsp; &nbsp; yFacturesSomme += facture.Prix; <br />
&nbsp; int compareFactureSomme = xFacturesSomme.CompareTo(yFacturesSomme); <br />
&nbsp; if (compareFactureSomme != 0) <br />
&nbsp; &nbsp; return -compareFactureSomme; <br />
&nbsp; int compareNom = x.Nom.CompareTo(y.Nom); <br />
&nbsp; if (compareNom != 0) <br />
&nbsp; &nbsp; return compareNom; <br />
&nbsp; return x.Prenom.CompareTo(y.Prenom); <br />
}); <br />
foreach (Client c in copyClients) <br />
{ <br />
&nbsp; decimal facturesSomme = 0; <br />
&nbsp; foreach (Facture facture in c.Factures) <br />
&nbsp; &nbsp; facturesSomme += facture.Prix; <br />
&nbsp; if (facturesSomme &gt; 50) <br />
&nbsp; &nbsp; Console.WriteLine(&quot;{0} {1} a dépensé {2} euros&quot;, c.Nom, c.Prenom, facturesSomme); <br />
}</div></div>
<p>Avec LINQ, ce code peut être grandement simplifié. Mais attention, on pourrait écrire ceci :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">foreach (var statClient in from c in <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(from client in clients <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; select new <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; client.Nom, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; client.Prenom, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TotalDepense = (from f in client.Factures <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; select f.Prix).Sum() <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }) <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;where c.TotalDepense &gt; 50 <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;orderby c.TotalDepense descending, c.Nom, c.Prenom <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;select c) <br />
&nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine(&quot;{0} {1} a dépensé {2} euros&quot;, statClient.Nom, statClient.Prenom, statClient.TotalDepense);</div></div>
<p>Cependant, analysons de plus près ce code : </p>
<p>Pour calculer la somme totale dépensée par le client, nous parcourons toutes les factures pour récupérer un IEnumerable sur le prix de celles-ci, puis nous reparcourons cet IEnumerable pour faire la somme.</p>
<p>L&rsquo;idée serait donc de regrouper ces deux boucles en une seule. Pour cela, utilisons une lambda expression et une autre signature de la méthode Sum :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">foreach (var statClient in from c in <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(from client in clients <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; select new <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; client.Nom, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; client.Prenom, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TotalDepense = client.Factures.Sum(f =&gt; f.Prix) <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }) <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;where c.TotalDepense &gt; 50 <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;orderby c.TotalDepense descending, c.Nom, c.Prenom <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;select c) <br />
&nbsp; Console.WriteLine(&quot;{0} {1} a dépensé {2} euros&quot;, statClient.Nom, statClient.Prenom, statClient.TotalDepense);</div></div>
<p>L&rsquo;autre problème que l&rsquo;on peut identifier, c&rsquo;est le fait que nous parcourons une première boucle sur les clients pour récupérer un IEnumerable de type anonyme avec le nom, le prénom et la somme dépensée et qu&rsquo;ensuite, nous reparcourons cet IEnumerable pour les trier. Effectivement, pour pouvoir trier par la somme dépensée, il faut au préalable l&rsquo;avoir calculée.</p>
<p>Là encore, une meilleure utilisation de LINQ pourrait nous permettre d&rsquo;optimiser cela :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">foreach (var statClient in from c in clients <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;let totalDepense = c.Factures.Sum(f =&gt; f.Prix) <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;where totalDepense &gt; 50 <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;orderby totalDepense descending, c.Nom, c.Prenom <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;select new <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{ <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c.Nom, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c.Prenom, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;TotalDepense = totalDepense <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}) <br />
&nbsp; Console.WriteLine(&quot;{0} {1} a dépensé {2} euros&quot;, statClient.Nom, statClient.Prenom, statClient.TotalDepense);</div></div>
<p>Via ce post, je cherche à démontrer deux choses :<br />
<b>la requête LINQ est beaucoup plus simple et claire que le code C# 2.0.<br />
une mauvaise connaissance de LINQ peut engendrer des pertes de performances importantes.</b></p>
<p>En revanche, avec LINQ To SQL, même si je ne vous conseille bien entendu pas d&rsquo;écrire de &laquo;&nbsp;mauvaises&nbsp;&raquo; requêtes, la requête SQL générée est optimisée. Dans les trois cas précédents, la requête sera la suivante :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">SELECT [t2].[Nom], [t2].[Prenom], [t2].[value] AS [TotalDepense] <br />
FROM ( <br />
&nbsp; SELECT [t0].[Nom], [t0].[Prenom], ( <br />
&nbsp; &nbsp; SELECT SUM([t1].[Prix]) <br />
&nbsp; &nbsp; FROM [dbo].[Facture] AS [t1] <br />
&nbsp; &nbsp; WHERE [t1].[Client] = [t0].[Id] <br />
&nbsp; ) AS [value] <br />
&nbsp; FROM [dbo].[Client] AS [t0] <br />
&nbsp; ) AS [t2] <br />
WHERE [t2].[value] &gt; @p0 <br />
ORDER BY [t2].[value] DESC, [t2].[Nom], [t2].[Prenom]</div></div>
<p>Le risque lié à une mauvaise connaissance de LINQ peut cependant être fortement réduit avec une formation (<a href="http://www.winwise.fr/formation/Presentation-de-LINQ-W095.aspx">http://www.winwise.fr/formation/Presentation-de-LINQ-W095.aspx</a> par exemple).</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Extension method : C# différent de VB</title>
		<link>https://blog.developpez.com/matthieu/p4493/net/extension_method_c_diff_vb</link>
		<comments>https://blog.developpez.com/matthieu/p4493/net/extension_method_c_diff_vb#comments</comments>
		<pubDate>Wed, 07 Nov 2007 07:05:51 +0000</pubDate>
		<dc:creator><![CDATA[Matthieu MEZIL]]></dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[VB]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Dans l&#8217;excellent article de Adrian &#171;&#160;Spotty&#160;&#187; Bowles paru dans le msdn mag sur les extension methods en VB, l&#8217;auteur nous explique que ce code : Imports System.Runtime.CompilerServices &#160; &#160; Module Module1 &#160; &#160; Sub Main() &#160; &#160; &#160; &#160; Dim s As Integer = 1234 &#160; &#160; &#160; &#160; Console.WriteLine(s.Foo) '&#60;- This will work &#160; &#160; &#160; &#160; &#160; Dim T As Object &#160; &#160; &#160; &#160; T = 1234 &#160; &#160; &#160; &#160; Console.WriteLine(T.Foo) [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><a href="http://msdn.microsoft.com/msdnmag/issues/07/11/BasicInstincts/">Dans l&rsquo;excellent article de Adrian &laquo;&nbsp;Spotty&nbsp;&raquo; Bowles paru dans le msdn mag sur les extension methods en VB</a>, l&rsquo;auteur nous explique que ce code :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Imports System.Runtime.CompilerServices &nbsp;<br />
&nbsp;<br />
Module Module1 <br />
&nbsp; &nbsp; Sub Main() <br />
&nbsp; &nbsp; &nbsp; &nbsp; Dim s As Integer = 1234 <br />
&nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine(s.Foo) '&lt;- This will work <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; Dim T As Object <br />
&nbsp; &nbsp; &nbsp; &nbsp; T = 1234 <br />
&nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine(T.Foo) &nbsp;'&lt;- This will fail <br />
&nbsp; &nbsp; End Sub <br />
End Module <br />
&nbsp;<br />
Module Extensions01 <br />
&nbsp; &nbsp; &lt;Extension()&gt; _ <br />
&nbsp; &nbsp; Function Foo(ByVal b As Object) As String <br />
&nbsp; &nbsp; &nbsp; &nbsp; Return &quot;Bar01&quot; <br />
&nbsp; &nbsp; End Function <br />
End Module</div></div>
<p>génère une exception à la compilation et c&rsquo;est vrai !</p>
<p>Mais pas en C#. </p>
<p>Le code suivant marche en effet très bien :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">class Program <br />
{ <br />
&nbsp; &nbsp; static void Main(string[] args) <br />
&nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; object o; <br />
&nbsp; &nbsp; &nbsp; &nbsp; o = 10; <br />
&nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine(o.Foo()); <br />
&nbsp; &nbsp; &nbsp; &nbsp; Console.ReadLine(); <br />
&nbsp; &nbsp; } <br />
} <br />
&nbsp;<br />
static class Ext <br />
{ <br />
&nbsp; &nbsp; public static string Foo(this object o) <br />
&nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; return &quot;test&quot;; <br />
&nbsp; &nbsp; } <br />
}</div></div>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VS 2008 sortie fin novembre</title>
		<link>https://blog.developpez.com/matthieu/p4487/tools/vs_2008_sortie_fin_novembre</link>
		<comments>https://blog.developpez.com/matthieu/p4487/tools/vs_2008_sortie_fin_novembre#comments</comments>
		<pubDate>Mon, 05 Nov 2007 22:33:25 +0000</pubDate>
		<dc:creator><![CDATA[Matthieu MEZIL]]></dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[LINQ]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[VB]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[C&#8217;est officiel, VS 2008 sortira fin novembre. Que du bonheur en perspective]]></description>
				<content:encoded><![CDATA[<p><a href="http://blogs.msdn.com/somasegar/archive/2007/11/05/teched-developer-in-europe.aspx">C&rsquo;est officiel, VS 2008 sortira fin novembre</a>. Que du bonheur en perspective <img src="https://blog.developpez.com/matthieu/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VS 2008 Beta 2 &#8211; En attendant la RTM</title>
		<link>https://blog.developpez.com/matthieu/p4486/tools/vs_2008_beta_2_en_attendant_la_rtm</link>
		<comments>https://blog.developpez.com/matthieu/p4486/tools/vs_2008_beta_2_en_attendant_la_rtm#comments</comments>
		<pubDate>Sat, 03 Nov 2007 22:22:53 +0000</pubDate>
		<dc:creator><![CDATA[Matthieu MEZIL]]></dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[LINQ]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[VB]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Si vous utilisez la Beta 2, vous avez sûrement eu le même problème que moi : la version expire au 1er novembre Il faut retélécharger les images pour ne plus avoir de limitation.]]></description>
				<content:encoded><![CDATA[<p>Si vous utilisez la Beta 2, vous avez sûrement eu le même problème que moi : la version expire au 1er novembre <img src="https://blog.developpez.com/matthieu/wp-includes/images/smilies/icon_sad.gif" alt=":(" class="wp-smiley" /><br />
<a href="http://blogs.msdn.com/jeffbe/archive/2007/10/30/vs2008-beta2-vpcs-re-released.aspx">Il faut retélécharger les images pour ne plus avoir de limitation</a>.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Update LINQ To SQL : toutes les colonnes, non pas forcément</title>
		<link>https://blog.developpez.com/matthieu/p4449/net/update_linq_to_sql_toutes_les_colonnes_n</link>
		<comments>https://blog.developpez.com/matthieu/p4449/net/update_linq_to_sql_toutes_les_colonnes_n#comments</comments>
		<pubDate>Sun, 28 Oct 2007 19:05:31 +0000</pubDate>
		<dc:creator><![CDATA[Matthieu MEZIL]]></dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[ADO .Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[LINQ]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[VB]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[J&#8217;avais blogué sur le fait que le Update de LINQ To SQL se faisait sur toutes les colonnes, y compris celles qui n&#8217;ont pas changés, ce qui peut poser des problèmes si vous avez des triggers sur le update de la table SQL. En réalité, j&#8217;avais bloggué un peu vite. En effet, de même qu&#8217;il est possible de ne charger des colonnes qu&#8217;au moment de l&#8217;utilisation de la propriété associée (Delay Loaded = true) avec [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><a href="http://blog.developpez.com/index.php?blog=121&amp;title=update_de_linq_to_sql_toutes_les_colonne&amp;more=1&amp;c=1&amp;tb=1&amp;pb=1">J&rsquo;avais blogué sur le fait que le Update de LINQ To SQL se faisait sur toutes les colonnes, y compris celles qui n&rsquo;ont pas changés, ce qui peut poser des problèmes si vous avez des triggers sur le update de la table SQL</a>.<br />
En réalité, j&rsquo;avais bloggué un peu vite. En effet, de même qu&rsquo;il est possible de ne charger des colonnes qu&rsquo;au moment de l&rsquo;utilisation de la propriété associée (Delay Loaded = true) avec <code class="codecolorer text default"><span class="text">System.Data.Linq.Link&lt;T&gt;</span></code>, il est possible de ne pas inclure une colonne à l&rsquo;update si celle-ci n&rsquo;a pas été modifiée avec l&rsquo;attribut <code class="codecolorer text default"><span class="text">UpdateCheck=UpdateCheck.WhenChanged</span></code>.</p>
<p>Vous pouvez retrouver Delay Loaded et Update Check dans la property grid du designer LINQ To SQL.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
