Skip to main content

Posts

Showing posts from 2006

Le SP1 de Visual Studio 2005 nouveau est là

Ce n'est pas trop tôt: nous l'attendions depuis longtemps , car VS2005 nous pose souvent de petits soucis en n'allant pas jusqu'au bout de certains scénarios. Pour télécharger le SP1 de Visual Studio 2005, c'est ici . Ne cherchez pas trois heures, il faut sélectionner le lien " Visual Studio 2005 Team Suite SP1 " même si vous avez un VS Professional... Je n'arrive pas à avoir la liste des correctifs inclus dedans, mais apparemment le SP1 comprend à la fois des correctifs de bugs la prise en charge de nouveaux scénarii

MySQL sous Visual Studio 2005

MySQL offre un provider ADO.net , mais il ne permet pas d'ajouter un serveur MySQL à l' explorateur de serveurs (Server Explorer) de Visual Studio 2005 . Ce qui est très dommage, car une fois ajouté on peut créer un DataSet typé ou des formulaires de données en deux coups de cuillère à pot. Depuis très peu, MySQL propose une extension Visual Studio pour cela. Mais c'est une première version beta, le type d'outil qu'on hésite à utiliser en production. Pour avoir quelque chose de stable, c'est pourtant assez simple: il suffit de télécharger le driver ODBC pour MySQL , et d'ajouter une source de données ODBC à l'explorateur de serveur.

Formation aux Windows Forms pour tous et complète

Pour ceux qui veulent tout connaître du développement d'applications Windows Forms avec le framework .net 2.0 , je viens de créer une nouvelle formation. Elle est accessible à tous les développeurs car elle commence par fixer les bases. Elle aborde des sujets avancés comme le remoting, l'accès déconnecté avancé avec ADO.net et le DataSet, la création de contrôles et de formulaires par héritage, le multithreading et l'interopérabilité. Vous pouvez en voir le programme complet . A noter qu'une version plus courte de cette formation existe aussi, mais elle ne prend pas le temps de redéfinir les bases et ne rentre pas en détail dans tous les sujets.

Afficher un formulaire abstract en mode design

Visual Studio 2005 n'accepte pas d'afficher un formulaire abstract en mode design . "By design", dit-on chez Microsoft , car après tout pour afficher il faut instancier, et une classe abstraite ne peut pas être instanciée. Mais Visual Studio reste incapable d'afficher la classe dérivée en mode design, et pour ça il n'y a aucune justification: une classe non abstract peut être instanciée... Seulement, quand on se lance dans l' héritage de formulaires , on se retrouve vite à placer dans les classes de base des membres abstraits, donc à les rendre abstraits eux-mêmes. Heureusement, il y a toujours des solutions à tout. En l'occurrence, c'est Urban Potato qui nous fournit une solution très élégante: un attribut qui résoud le problème . Avec sa solution qu'il décrit en détails , Visual Studio accepte d'afficher le formulaire de base et le formulaire dérivé en mode design. Comme il l'écrit lui-même, ce n'est pas une solution qui fonctio

Framework 3.0: c'est parti!

Il est enfin sorti en version finale ! Le runtime est ici . Les extensions pour développer sur WPF avec Visual Studio 2005 sont ici . ASP.net n'est pas en reste avec l' AJAX framework qui est aussi en version finale, ici . Les extensions pour WCF et WPF ne sont pas encore finales, mais on peut en récupérer la dernière CTP ici .

ClickOnce requiert beaucoup de clics

Vu sur Gotdotnet , un post qui semble venir de Microsoft ( ClickOnce Community Resource Kit) . Le contenu du document semble prometteur, mais sa présentation vaut le détour: "Deploying client applications with ClickOnce requires a lot of procedural steps to accomplish" ce qui, en français, donne à peu près: "Le déploiement d'applications ClickOnce requiert un grand nombre d'étapes ". Plutôt curieux qu'une technologie qui s'appelle " cliquez une seule fois " demande autant de boulot, non? ;-)

Enfin le SP1 de Visual Studio!

...mais ce n'est pas le bon! En recevant ma mise à jour MSDN Library ce matin, j'ai sauté au plafond en voyant que le Service Pack 1 de Visual Studio en faisait partie . Je savais que le SP1 de Visual Studio 2005 était en beta, mais je n'avais pas ouï dire de sa sortie. Quelle joie! Parce qu'avec les nombreux bugs et limitations de Visual Studio 2005, un SP se fait vraiment attendre... Mais la joie fut de courte durée: en regardant de plus près, j'ai vu que c'était le SP1 de Visual Studio 2003 . Quelle déception! D'autant plus que Visual Studio 2003 est nettement plus stable que 2005.

C'était trop difficile...

Visual Studio 2003 prenait en charge l' héritage visuel . C'est à dire le fait d'hériter d'un formulaire pour en créer un nouveau (après tout ce sont des classes, donc c'est permis par les langages .net). Visual Studio 2005 le prend donc aussi en charge. Mais avec un certain nombre de limites . Il est notamment impossible de modifier un ToolStrip dans un formulaire enfant s'il a été défini dans son formulaire parent. Pire: l'enfant ne peut même pas ajouter son propre ToolStrip. Et Microsoft, que disent-ils de ce problème? Qu'ils savent, et qu'ils ne l'ont pas fait " parce que cela demandait un effort d'ingéniérie" ! A noter que ces limitations ne s'appliquent qu'au mode Design. En écrivant le code, on peut faire tout cela sans problème. Mais dans ce cas à quoi sert le mode Design?

Visual Studio : c'est de la bombe!

Lors de l'installation de Visual Studio Orcas September CTP, dont je vous parlais ce matin , après démarrage de la machine virtuelle, on a le message suivant: Rien d'extraordinaire, puisque sur ma machine le disque de base se trouve à un autre emplacement que chez Microsoft. Mais ce qui est cocasse, c'est le répertoire dans lequel ils placent la base: TimeBombedBase . Nous sommes donc prévenus: si ça explose, on ne pourra pas venir se plaindre!

Visual Studio Orcas pour les fainéants

Greg nous annonce que la CTP de septembre de Visual Studio Orcas est maintenant disponible. Vu le rythme auquel Microsoft sort des betas en ce moment, il n'y a rien de surprenant. Mais la nouveauté, c'est que cette CTP est disponible en tant qu' image virtual PC . Et là ça change tout: au lieu de devoir installer Vista, le SDK et Visual Studio, c'est du "download and play". A télécharger ici . Le message de Greg est ici .

Plan de formation 2007: préparez-le dès maintenant

Mes formations inter-entreprises sont maintenant planifiées jusqu'en juin 2007. Vous pouvez dores et déjà préparer le plan de formation d'entreprise 2007. Pour rappel, mes formations sont les suivantes: Développer une application Web dynamique avec ASP.net 2.0 Introduction au développement d’applications Windows avec le Framework .net V2.0 Elles sont admissibles au titre du plan de formation de l'entreprise, du DIF (Droit Individuel à la Formation) et du CIF.

Les alias de using fonctionnent aussi avec les classes

Nous connaissons la syntaxe: using Toto = System.Data; Toto.DataTable t; Elle est pratique, mais d'une utilité finalement limitée. Ce qui est moins connu est que cet aliasage fonctionne aussi sur les noms de classes. Ce qui tombe bien car les noms de classes générés par un DataSet typé sont pour le moins alambiqués. Par exemple, si je génère un DataSet AllData contenant une table Comics, pour faire référence à la DataTable et à ses lignes il faudra écrire: using API; [...] AllData.ComicsDataTable t = a.GetData(); AllData.ComicsRow c = t[0]; Grâce aux alias, il suffit d'écrire: using Comics = API.AllData.ComicsDataTable; using Comic = API.AllData.ComicsRow; [...] Comics t = a.GetData(); Comic c = t[0];

Encore une fonctionnalité pour les mini-projets.

Plus je l'utilise, plus je déteste Visual Studio 2005 . Il permet de créer des petits projets très vite, mais on se rend compte que tout son code autogénéré est inmodifiable. Ce qui est très gênant pour les gros projets, où ce code est rarement adapté. En l'occurrence, je me rends compte que sa gestion automatisée des propriétés est inmodifiable, et même boguée. Pour éviter au développeur d'écrire dans le fichier app.config (qu'est-ce que c'est dur, écrire dans un fichier XML!), il pond une classe codée dans Settings.Designer.cs , qui ne fait presque rien à part placer un attribut DefaultSettingValueAttribute devant chaque propriété fortement typée. Et justement, ce DefaultSettingValueAttribute prend le pas quand les configurations sont pour une DLL, car alors VS2005 (qui veut pourtant tout automatiser) ne recopie pas le contenu du fichier de configuration dans celui de l'EXE utilisateur.

Pas de gestion de contraintes dans les BindingSources

Encore une déception sur la route du "vite fait avec Visual Studio 2005". En l'occurrence, le système BindingSource ne gère pas les erreurs de saisie de l'utilisateur (contraintes non respectées, valeurs nulles et j'en passe). Même en rajoutant un errorProvider, le problème n'est pas résolu. Le pire c'est que lesdites erreurs résultent en des exceptions incatchables (car elles ne font pas intervenir de code utilisateur ni d'événements) qui font planter l'application. C'est apparemment un problème d'actualité si l'on en juge les articles suivants: 1 , 2 , 3 . Pourtant Microsoft semble botter en touche à chaque fois. Ce serait bien d'avoir une réponse sérieuse: si c'est un bug, une correction serait la bienvenue. Car je suis en train de me résigner à corriger moi-même BindingSource, comme beaucoup de monde.

L'astuce qui tue: créer beaucoup de gestionnaires d'événements

Vous venez de placer plusieurs boutons sur un formulaire Windows Forms dans le concepteur de Visual Studio 2005. Vous devez créer les gestionnaires d'événements associés. Plutôt que de double-cliquer sur chacun des boutons, il suffit de tous les sélectionner (par exemple en maintenant la touche Ctrl appuyée en cliquant tour à tour sur les boutons), puis de double-cliquer sur n'importe lequel des boutons sélectionnés. Et voilà!

Vous ai-je déjà dit ce que je pensais des TableAdapters?

Certes, ce sont des outils intéressant pour la conception RAD. Mais leur conception a été quelque peu bâclée . Aujourd'hui, j'ai une dent de plus contre eux. J'ai besoin de gérer l' accès concurrentiel dans une application, et pour cela je souhaite exécuter toutes les requêtes de mise à jour puis traiter les erreurs. Avec le DataAdapter, aucun problème, il suffit de positionner la propriété ContinueUpdateOnError à true. Mais le TableAdapter n'expose ni cette propriété, ni le DataAdapter sous-jascent . Ah, que j'aimerais avoir ne serait-ce qu'un événement dans le TableAdapter qui dit "le DataAdapter est instancié et prêt à être utilisé par le TableAdapter, veux-tu en faire quelque chose avant?". Ca ne serait pas un parangon d'encapsulation, mais ça serait déjà ça!

ATLAS 1.0

Aujourd'hui est à marquer d'une pierre blanche. En effet, nous apprenons que Microsoft compte sortir une version officielle d' ATLAS avant la prochaine version de Visual Studio. C'est Scott Guthrie qui nous l'annonce ici . Carol Roy relègue l'annonce avec une description d'ATLAS.

Formation ASP.net 2.0

Comme promis , j'anime maintenant des formations inter-entreprises . Qualité et faibles tarifs sont au rendez-vous. Pour commencer, ma formation "Développer une application Web dynamique avec ASP.net 2.0" est programmée dès octobre . Inscrivez-vous vite!

Intégrer un flux RSS à un formulaire Web ASP.net

Je souhaitais afficher les derniers articles de ce blog sur mon site Web . Le contrôle serveur Xml sait récupérer du XML et lui appliquer une transformation XSL/T . Et justement, le RSS c'est du XML . Mais il faut écrire la transformation XSL/T, et je me rappelle qu'un professeur d'informatique disait qu'un bon informaticien est fainéant. Après une petite recherche, je suis tombé sur le contrôle serveur RssFeed . En deux temps et trois mouvements, il était intégré à ma page. Et il fonctionne bien. Il est compilé pour le .net framework 1.1 , et fonctionne donc avec Visual Studio 2003 et 2005. A mettre dans vos favoris!

La limite des ObjectDataSources

En ASP.net V2.0 nous avons les contrôles DataSource qui permettent de créer des WebForms de manipulation de données sans écrire de code. Ils sont plutôt bien faits , même si j'ai tendance à leur reprocher le fait qu'ils introduisent l'utilisation de contrôles non-graphiques dans le gabarit des formulaires Web. Aujourd'hui, je suis tombé sur l'une de leurs limitations, plutôt frustrantes. J'imbrique un contrôle Repeater dans un DataGrid , et j'ai besoin que les données du Repeater varient en fonction de la ligne du DataGrid. Le Repeater étant lié à un ObjectDataSource, j''ai simplement écrit que je souhaite récupérer comme paramètre du DataSource une colonne des données de la ligne courante : <asp:ObjectDataSource ID="ObjectDataSourceSessionsFutures" runat="server" SelectMethod="SessionsFutures"     TypeName="Training.Sessions">     <SelectParameters>         <asp:Parameter DefaultValue=&q

Requêtes de TableAdapters paramétrées et Access

Vous connaissez mon point de vue sur les TableAdapters : ce ne sont pas mes grands amis. Mais comme ils permettent de créer des formulaires simplement sous Visual Studio 2005 , j'apprends à vivre avec pour simplifier la vie de mes clients. Pour chaque TableAdapter , on peut créer des requêtes qui seront stockées dans la définition du DataSet typé et accessibles en tant que méthodes du TableAdapter. Pour leur passer des paramètres , j'étais habitué à utiliser des requêtes du style: SELECT Champ FROM Table WHERE Valeur = @Param Mais, à ma grande surprise, ça ne fonctionnait plus. Pourquoi? Parce que j'utilisais Access . Dans ce cas, la requête doit être du style: SELECT Champ FROM Table WHERE Valeur = ? J'ai eu du mal à trouver cette réponse, et je ne suis pas le seul si on en juge ces articles sans réponse correcte: article 1 , article 2 . En fait, c'est le provider utilisé qui détermine la façon de nommer les paramètres: avec SqlClient c'est les &q

Permettre le chargement dynamique des noeuds d'un TreeView

J'ai besoin d'afficher sous la forme d'un arbre les données d'une grosse base de données. La méthode bête consiste à récupérer toutes les données d'un coup et laisser l'utilisateur naviguer dedans. Une méthode plus fine est de ne charger que le premier niveau de noeuds, et lorsque l'utilisateur clique sur le signe "+" à côté d'un noeud, d'aller chercher les données correspondantes au niveau suivant en base. Bref, de charger au fur et à mesure (dynamiquement) les données. Cependant, s'il n'y a pas de noeuds sous les noeuds de premier niveau, le signe "+" ne s'affichera pas à côté de ceux-ci. Comment l'afficher? Le TreeView des Windows Forms ne semble pas le permettre, contrairement à celui des WebForms qui prévoit l'affichage dynamique . Je n'ai rien trouvé de mieux que d'ajouter un sous-noeud temporaire, que je supprime au moment ou l'utilisateur veut voir les sous noeuds. Ce n'est pas tr

Automatiser un déclenchement d'événement thread-safe en C#

J'ai fait un composant détectant la présence du réseau, car la classe NetworkChange était trop limitée pour les besoins d'un client. Ce composant émet périodiquement des pings vers un serveur pour détecter sa disponibilité. Lorsque le serveur devient accessible ou inaccessible, un événement est levé. Le problème, c'est que si je lève simplement l'événement en appelant le (tableau de) délégué(s) correspondant, le gestionnaire d'événements est appelé par le thread de travail qui fait les pings. Or, en Windows Forms , je n'ai pas le droit de mettre à jour un contrôle avec un thread autre que celui qui est affecté à ce contrôle . Plutôt qu'un long discours, voici le code qui détecte le fait que le gestionnaire d'événements est au sein d'un contrôle, et invoque le gestionnaire d'événements avec le thread du contrôle le cas échéant: if (ServerAvailabilityChanged != null) {     foreach (ServerAvailabilityChangedEventHandler targetHandler in Serv

Debug = true

Lorsqu'une application ASP.net est déployée, on ne doit pas trouver de debug="true" dans le fichier web.config . C'est vrai pour un certain nombre de raisons, dont la performance n'est pas la moindre. Malheureusement, si la procédure de déploiement n'est pas rigoureuse, c'est le genre d'instruction qui peut passer d'une machine de développement à une machine en production. Si, si, j'ai des exemples. Bonne nouvelle: Tess nous indique qu'en ASP.net V2.0, il est possible de demander à faire fonctionner toutes les applications ASP.net en debug="false", quelle que soit la valeur de cet attribut dans leur web.config. Et c'est simple à faire: il suffit d'ajouter l'élément suivant dans le fichier machine.config : <configuration>     <system.web>           <deployment retail=”true”/>     </system.web> </configuration> Et c'est tout! En outre, cet élément désactive l'affichage d

Access permet-il réellement un accès distant?

Microsoft Access peut être un gestionnaire de base de donnée intéressant puisqu'il fait souvent partie des licences Office des entreprises. Pour permettre un accès distant à une base Access partagée entre plusieurs client, il suffit de placer le fichier *.mdb correspondant dans un répertoire partagé . C'est une solution très simple à mettre en oeuvre, mais l'avantage s'arrête là dès que l'on veut gérer des bases volumineuses . En effet, le moteur d'Access, Jet, tourne sur les machines clientes . Si je fais une requête SELECT * FROM MaTable WHERE Date>#2006/08/01#, c'est toute la table MaTable qui va être parcourue, autrement dit toutes les données de la table vont transiter entre le serveur et le client, alors que je n'ai besoin que des plus récentes d'après ma requête. En utilisant un vrai serveur, comme SQL Server (ou Oracle, bien sûr), Les seules données transitant entre le client et le serveur seraient la requête et les lignes de MaTable q

Technique: Introduction à Windows Workflow Foundation (WF)

Windows Workflow Foundation , qui fait partie du .net Framework 3.0 , permet de créer simplement des tâches et de définir graphiquement (avec Visual Studio) ou en XML (XOML plus exactement) leur chemin d'exécution (workflow). Avec des conditions, des paramètres et tout et tout. Ce dont presque toute application a besoin, en somme. Pour plonger dans cette prometteuse technologie, Sahil Malik nous propose un article succint sur la réalisation d'un "Hello, World" avec WF .

Technique: Appliquer un thème à toutes les pages

Dans un article précédent , je n'arrivais pas à trouver une manière centralisée d' appliquer un thème (indiqué dans le Profile ) à toutes les pages de l'application. Daniel Tizon m'a fourni la solution: dans le global.asax , il suffit de traiter l'événement Pre_Init de toutes les pages. Le code qu'il m'a fourni est de surcroit un exemple de simplicité: protected void Application_PreRequestHandlerExecute(object sender, EventArgs e) { System.Web.UI.Page Page = HttpContext.Current.Handler as System.Web.UI.Page; if (Page != null) Page.PreInit += new System.EventHandler(Page_PreInit); } void Page_PreInit(object sender,EventArgs e) { System.Web.UI.Page Page = sender as System.Web.UI.Page; if (Page != null) { if(Profile.Theme!=null) Page.Theme = Profile.Theme; } } Merci Daniel.

Technique: Le mythe des procédures stockées

Jusqu'à il y a peu, Microsoft nous recommandait d'utiliser des procédures stockées plutôt que des requêtes SQL générées pour exécuter des requêtes sur SQL Server depuis une application. Cela permet notamment d'avoir une granularité plus fine sur la sécurité et, nous disait-on, une exécution plus rapide puisque SQL Server pouvait pré-calculer le meilleur chemin d'exécution de la requête. Mais depuis que Microsoft a décidé de générer les requêtes depuis l'application avec LinQ, les procédures stockées sont devenues plus lentes. Je viens encore d'en voir la justification de Microsoft : "une requête SQL paramétrée s'exécute plus vite que la procédure stockée équivalente, puisque SQL Server ne peut optimiser correctement le chemin d'exécution qu'une fois qu'il a la valeur du paramètre". Et tout le monde semble gober leur explication. Soyons honnêtes: pourquoi Microsoft n'ajoute pas une option sur les procédures stockées qui permet de

Technique: Convertir du C# en VB.net

J'ai créé une classe en C# pour une formation, et il faut aussi la fournir en VB.net . Comme je déteste le travail bête et méchant, j'ai fait une petite recherche et j'ai trouvé plusieurs services de conversion . Cette page a fonctionné presque parfaitement avec mon code. Deux copier-coller et un peu de correction, et le tour était joué. Merci à Andres Aguiar pour avoir indiqué cette page.

Technique: XAML alias WinASP.net

Avec ASP.net, l e développement Web avait clairement pris une remarquable avance sur le développement Windows (les Windows Forms), en se basant sur ce principe simple: la séparation de la présentation et du code. En ASP.net , la présentation se décrit en XML dans un fichier .aspx et la logique en langage .net dans un autre fichier. En Windows Forms , tout est mélangé dans le même fichier. Visual Studio 2003 masquait ce mélange en créant une section de code "cachée", tandis que Visual Studio 2005 place le code de présentation dans un autre fichier qui fait pourtant partie de la même classe. Avec Windows Presentation Foundation (anciennement Avalon), nous avons enfin droit à la séparation présentation / code dans le monde des applications Windows. Ce qui permet notamment de faire travailler indépendamment un graphiste et un programmeur sur le même formulaire. Et la bonne nouvelle c'est que WPF est intégré au .net Framework 3.0 , qui tourne sous Windows XP et Vista. Pour m

Technique: Thèmes dynamiques: pas encore au point

Avec les thèmes d'ASP.net 2.0, on peut facilement changer l'apparence d'un site . Il suffit de changer le nom du thème à utiliser dans le fichier web.config. Mais c'est un changement statique , fait par l'administrateur du site. Comment faire si l'on veut qu'un utilisateur puisse choisir lui-même un thème pour tout son site? Il existe la propriété Theme sur chaque Page, que l'on peut régler dynamiquement, mais le gros problème c'est que la propriété Theme n'est pas disponible sur la classe Master (pour les master pages). Nous sommes donc condamnés à écrire sur chaque page le code affectant dynamiquement le thème. C'est lourd. L'autre possibilité est d' écrire ce code dans une classe de base (héritant de la classe Page), dont hériteraient toutes nos pages. C'est mieux, mais ça oblige à faire hériter toutes nos pages de cette classe de base. Or Visual Studio n'a pas d'option qui permettrait d'avoir cet héritage auto

Technique: Le TableAdapter, un bel outil mal fait

Suis-je le seul à me battre avec les TableAdapters, ces classes générées par Visual Studio 2005 pour les DataSets typés? D'un côté, ce sont de beaux outils pour générer rapidement des formulaires d'accès aux données: après tout, il s'agit de la génération automatique d'une couche de mapping O/R (les grands mots sont sortis). Mais dès qu'on creuse, c'est la déception: Le TableAdapter se base sur un DataAdapter (après tout il ne fait pas grand chose de plus), mais le DataAdapter sous-jacent est private; Le TableAdapter n'implémente aucune interface (il hérite juste de ComponentModel, ce qui ne nous avance pas à grand chose); Il n'y a pas de moyen de demander à un DataSet typé la liste de ses TableAdapters. Autrement dit, les TableAdapters sont un bel exemple de non-architecture, d'anti-design pattern. En ce moment, j'ajoute la prise en charge de l'accès déconnecté aux TableAdapters, et c'est casse-tête à cause des points ci-dessus. PS: si v

Technique: Tests unitaires avancés

Parmis mes outils favoris quand je développe, il y a NUnit . Il permet de rapidement voir progresser (ou régresser) son projet, au rythme des tests unitaires de plus en plus nombreux qui réussissent. Et il permet bien sûr de rapidement détecter les éventuels effets de bords liés à une (même petite) modification. Malheureusement, NUnit ne permet pas de conditionner des tests par la réussite d'autres tests. C'est apparemment hors de la philosophie de NUnit, pour lequel tout test unitaire devrait être indépendant des autres. Mais la réalité, c'est que l'on a parfois des tests dépendant d'autres test. Un exemple simple: dans une application se connectant à une base de données hébergée, il paraît logique de ne tester la connexion au serveur que si un accès réseau est disponible. Si j'utilise NUnit et que le réseau n'est pas disponible, les deux tests vireront au rouge. Alors que si je conditionne le test de la connexion au serveur à la réussite du test d'accè

Formation: bientôt mes formations ASP.net 2.0 et Windows Forms 2.0

A la rentrée 2006, je compte organiser des sessions de formation sur mes deux formations phare: Développer une application Web dynamique avec ASP.net 2.0 (AW2101) Introduction au développement d’applications Windows avec le Framework .net V2.0 (AW2201) Pour cela, je cherche à louer une salle de formation sur Paris, avec des machines bien équipées (1 Go de RAM et un processeur correct). Une salle à me proposer? Contactez-moi ...

Technique: Comment faire un cast dynamique en C# ?

En tant que langage fortement typé, C# sauve souvent la vie du développeur grâce à ses vérifications à la compilation. Il nous oblige à connaître lors de la compilation le type vers lequel on veut caster une variable, et c'est l'une de ses forces. Pourtant, je suis tombé sur un cas où j'avais besoin d'un cast (transtypage) dynamique. J'ai en effet besoin d'appeler une méthode par réflexion, et le paramètre à lui passer doit être casté. Considérons l'extrait de code suivant: MethodInfo mi = adapterType.GetMethod("Update", parameterTypes); object[] dataSetParameter = { ds }; mi.Invoke(UnderLyingAdapter, dataSetParameter); Il sert à appeler la méthode Update d'un TableAdapter (celle-ci étant auto-générée, je n'ai pas d'autre choix que la réflexion pour l'appeler, mais c'est un autre sujet). Eh bien, que se passe-t-il si la méthode Update attend un DataSet typé (auto-généré) alors que je n'ai qu'un simple DataSet (System.Dat

Inauguration

C'est avec plaisir que j'inaugure ce nouvel espace, dans lequel vous pourrez me suivre au rythme des octets. Pourquoi un blog de plus? Parce que je crois que c'est la meilleure manière de faire partager au plus grand nombre mes expériences et idées... et de recevoir vos commentaires sur mes projets. Sur ce blog je vous ferai part de mes remarques techniques, pour un public averti, mais aussi de mon point de vue de formateur, de consultant, ainsi que de mes projets. Bref, ce blog est tout public.