Methodes d'extensions pour WINDOWS PHONE et XBOX360

Publié le par Jérémy JANISZEWSKI

INTRODUCTION

Le framework .NET regorge de classes et de méthodes hyper utiles. Cependant il se peut que sa petite soeur (le compact framework .NET donc) ne dispose pas necessairement des dites méthodes. Le plus flagrant à mes yeux et de ce que j'ai pu en voir est la classe List. (qu'accessoirement, j'utilise souvent).

Nous allons donc lui rajouter quelques méthodes pour le moment (les méthodes FindIndex, Find et TrueForAll) et une méthode générique de clonage (qui nous évitera le désagrément de caster le clone en un objet X)

CREATION DE LA CLASSE

Cette classe contiendra les méthodes d'extensions, ainsi il sera plus aisé de les utiliser.

Nous allons d'abord ajouter une directive #if XBOX360 || WINDOWS_PHONE dans notre classe. Cela donne :

 /// <summary> /// Extensions for the list class. /// </summary> static public class ListExtensions { #if XBOX360 || WINDOWS_PHONE #endif } 

Nous allons ajouter en premier lieu la méthode TrueForAll. Dans le framework .NET, cette méthode prend 1 argument :

  • Le prédicat qui définit la condition à vérifier pour tous les éléments.

Le moyen le plus simple d'arriver à implémenter cette fonction est de tester si chaque élément vérifie le prédicat. Si un seul de ces éléments ne le vérifie pas, nous renvoyons false, sinon nous renvoyons true.

Pareil méthode s'écrit ainsi :

 static public bool TrueForAll<T>(this List<T> list, Predicate<T> match) {  ExceptionHelper.RaiseNullException(match, "match"); foreach (T item in list) { if (!match(item)) return false; } return true; } 

Remarquez comment nous définissons une méthode générique :

  • Nous rajoutons <T> en fin de méthode pour définir le paramètre générique, ce qui nous permet d'utiliser les listes et les prédicats génériques.

Voyez comment il a été simple d'ajouter cette méthode.

La méthode Find suit exactement le même schéma, sauf qu'au lieu de renvoyer false si le matching n'est pas bon, il suffit de tester le matching sur chaque élément et si le matching est vrai, nous renvoyons l'item qui est responsable de la condition.

Si aucun matching n'est bon, comme nous avons à faire à des paramètres génériques, il faut renvoyer default(T).

Cette méthode est écrite ainsi :

 static public T Find<T>(this List<T> list, Predicate<T> match) { ExceptionHelper.RaiseNullException(match, "match"); foreach (T item in list) { if (match(item)) return item; } return default(T); } 

En ce qui concerne la méthode FindIndex, elle suit le même schéma que la méthode Find, à ceci près que le matching se fait sur l'index actuelle de la liste et que si le matching est vrai, nous renvoyons l'index. Si aucun matching n'est bon, nous renvoyons -1.

Cette méthode s'implémente ainsi :

 static public int FindIndex<T>(this List<T> list, Predicate<T> match) {  ExceptionHelper.RaiseNullOrEmptyException(list, "list"); for (int i = 0; i < list.Count; i++) { if (match(list[i])) return i; } return -1; } 

Et enfin la dernière méthode que nous ajouterons (en dehors du couple #if / #endif) permettra le clonage générique de la classe List.

Cette méthode est aussi simple que les deux autres :

 static public List<T> Clone<T>(this IList<T> list) {  return new List<T>(list); } 

CONCLUSION

Nous avons comment rajouter des méthodes présentes dans le framework .NET mais inexistantes sur le compact framework .NET et donc indisponibles sous XBOX360 et WINDOWS PHONE.

La prochaine fois, nous ajouterons les méthodes TryParse à la XBOX360 et au WINDOWS PHONE. (en se servant d'une astuce de Benjamin Nietscke)

Stay tuned,

@bientôt sur ce blog



Pour être informé des derniers articles, inscrivez vous :
Commenter cet article