avril
2007
Je n’avais même pas fait attention mais l’intellisence relatif aux extension methods c’est amélioré depuis le CTP de janvier. En effet, l’intellisence vérifie le type dans le cas d’intellisence sur des extension methods génériques. De plis, quand on appelle une extension method, l’intellisence ne nous propose plus le paramètre sur lequel s’applique l’extension methods ! Deux regrets énoncés dans mon article sur le C# 3.0 de corrigés. Cool ! A propos de cet article, je […]
avril
2007
A mon avis le Select sur un DataTable a deux défauts : Comme nous l’avons vu dans un post précédent, il vaut mieux préférer les IEnumerable aux tableaux (surtout en C# 3.0) la méthode Select nous retourne un tableau de DataRow. Quand on travaille avec une table typée (héritant de TypedTableBase<T> en C#3.0), il est souvent pénible de devoir caster chaque élément. Pour résoudre cela, je suis passé par les extension methods namespace System.Data { […]
avril
2007
Dans un post précédant, j’avais regretté que les local variable type inference soient associé à Object dans le cas d’un foreach. Bizarrement, dans ce cas là, pas de soucis, ma variable dataRow est bien castée. Quelqu’un sait-il pourquoi ?
avril
2007
Mon frère Vincent et son ami Jean ont réalisé les dessins du nouvel épisode de Sambre de Bernard Yslaire.
avril
2007
Quand on met e.Cancel = true dans le vaildating d’un contôle, on n’est censé ne pouvoir aller ailleurs que dans le contrôle tant que e.Cancel = true. On ne peut même pas fermer la fenêtre. Pourtant, il y a un petit bug avec la DataGridView : on peut, malgré le e.Cancel = true, allez modifier la ligne sélectionnée du DataGridView (impossible avec un TreeView par exemple). Du coup cela peut poser problème quand le e.cancel […]
avril
2007
Eric Lippert a posté une série 3 posts intitulés « Practice thinking like a compiler tester »(1, 2 et 3) que je trouve assez rigolo. Je n’en reviens toujours pas que ce genre de chose compilent : public class C : A { } public class A { public class D : C { } }
avril
2007
Dans un post précédent, je comparais l’implémentation des interfaces en VB et C#. Je suis tombé sur un problème spécifique au VB aujourd’hui : J’étais dans le cas d’une classe qui a décidé d’implémenter les propriétés d’une interface qu’elle implémente en leur donnant d’autres noms. Ex : Interface ITest Property Prop() As String End Interface Class Test Public Property P() As String Implements ITest.Prop […] End […]
avril
2007
Une limitation des génériques repose dans le fait que le type doit être défini à la compilation ! Cependant, on peut tout de même feinter public IList GetMaxTypedList(IEnumerable values) { Type t = null; foreach (object o in values) if (t == null) t = o.GetType(); else t = Pgcd(t, o.GetType()); IList list = Activator.CreateInstance(Type.GetType("System.Collections.Generic.List`1[[" + t.ToString() + ", […]
avril
2007
J’ai essayé d’améliorer l’exemple de Mike Taulty. Voici le code wue je propose : namespace System.Collections.Generic { public static class IEnumerableExtension { public static DataTable ToDataTable<T>(this IEnumerable<T> enumerable) { return ToDataTable(enumerable, null); } public static DataTable ToDataTable<T>(this IEnumerable<T> enumerable, Func<IEnumerable<PropertyInfo>, IEnumerable<PropertyInfo>> filterPropertiesDelegate) { DataTable table = new DataTable(); IEnumerable<PropertyInfo> props = […]
avril
2007
Dans mon article sur le DataBinding avancé, j’utilisais la méthode suivante : private Control FindBoundControl(object dataSource, string propertyName) { if (BindingContext[dataSource] == null) return null; foreach (Binding binding in BindingContext[dataSource].Bindings) if (binding.BindingMemberInfo.BindingField == propertyName) return binding.Control; return null; } En utilisant C# 3.0, je fais plutôt ceci : public static class BindingContextExtensionMethods { public static Control FindControl(this BindingContext bindingContext, object dataSource, string propertyName) […]