Revenant sur le sujet d'un précédent message, j'aimerais avoir un retour sur une solution proposée.
Dans mon code (C# 3.0), je dois gérer des formulaires d'application qui me sont fournis par un service dans une structure objet à partir d'un gros document XML désérialisé. Le formulaire peut contenir de nombreux types de données différents. Je dois donc effectuer de nombreux contrôles de nullité pour vérifier la présence de données.
Par exemple, il pourrait y avoir une valeur pour :
ApplicationForm.EmployeeInfo.PersonalInfo.Name
Et pour vérifier une valeur non nulle, je dois vérifier chaque étape de la descente.
Je veux éviter les longues instructions if et les blocs try-catch. Ma solution est donc la méthode d'extension.
public static T NN<T>(this T obj) where T : class, new()
{
return obj ?? new T();
}
qui peut être utilisé comme
if (ApplicationForm.NN().EmployeeInfo.NN().PersonalInfo.NN().Name != null)
De cette façon, si l'étape suivante de la hiérarchie n'est pas initialisée, elle est temporairement réinitialisée et retournée. La méthode NN (Not Null) renvoie l'objet par défaut au lieu de null, ce qui dans mon cas convient parfaitement. Et lorsque je travaille avec des structures d'objets générées par xsd-tool où je dois vérifier la propriété "~Specified" de tous les éléments optionnels, cette méthode est très utile.
Je me demande maintenant si je ne manque pas quelque chose qui fait de cette solution, par ailleurs bonne, un mauvais choix. La création d'un si grand nombre d'objets vides par défaut est-elle trop lourde pour la mémoire ou les performances ou y a-t-il d'autres problèmes ?
Un test rapide, mais bien sûr non concluant, que j'ai effectué n'a révélé aucune baisse significative des performances.