Dans mes méthodes d'élimination (comme celle ci-dessous), chaque fois que je veux appeler quelqueobj.dispose () J'ai également un chèque pour ToObj! = NULL.
est-ce à cause du mauvais design de ma part?
Est leur moyen plus propre de déterminer que disposer de tous les membres (mise en œuvre Idisposable) utilisée dans un objet est appelé sans risque d'exception nullreference? P> merci pour votre intérêt. p> p>
5 Réponses :
Seulement vous connaissez la réponse à celle-ci! p>
Sans voir votre classe entière, il est difficile pour quelqu'un d'autre de dire s'il est possible que ces membres soient jamais nuls lorsque (bien sûr, en règle générale, il est toujours possible pour un type de référence ou un type de valeur nullable pour être null, il est donc probablement de bonne pratique de toujours inclure ces chèques nuls.) P> Dispose code> est appelé. P>
Peut-être que quelqu'un d'autre peut trimer à ce sujet, mais je ne pense pas personnellement que c'est une faille de conception - juste le moyen le plus sûr de le faire.
Cela dit, rien ne vous empêche d'envelopper votre NULL Vérification et
Disposez CODE> Appelez dans une méthode pratique: P>
protected void Dispose(bool disposing)
{
if (disposing)
{
DisposeMember(_splitTradePopupManager);
DisposeMember(_disposableMember2);
DisposeMember(_disposableMember3);
}
}
D'accord avec ce n'est pas une faille de conception. Peut-être que je suis trop prudent, mais je préfère avoir un chèque null même lorsque je sais certifié que l'objet ne sera jamais nulle quand il s'agit de disposer de jetables.
@Comet: +1, j'ai la même pensée (trop prudente) à l'arrière de l'esprit tout en appelant () sur un objet.
La seule autre option que je pouvais penser serait de créer un DisposeoseParamètre Code> Méthode d'assistant contenant un objet en tant que paramètre et uniquement des vérifications s'il s'agit de NULL et de le disposer. De cette façon, vous auriez besoin d'une ligne de code pour en éliminer, mais je ne sais pas si cela le rendrait plus lisible. P>
Essayez ceci.
Je ne suis pas sûr de comprendre ce que vous suggérez ici.
Ce n'était pas moi, mais vérifier si le membre est un Idisposable code> est un peu idiot, car un appel à
membre.Dispose () code> ne compilerait pas lorsque
code> n'était pas un type jetable.
Stackoverflow.com/questions/2349378/... PS Je n'ai pas bownvote, mais null! = Membre m'a juste rappelé ce poste;)
J'aime la solution de @dan Tao, mais c'est bien mieux qu'une méthode d'extension, imo: Vous pouvez simplement appeler membre.SafeDispose () code> sur Tout
Idisposable code> dans votre programme sans souci. :) p> p>
Cela ne jette pas une exception de référence nulle lorsqu'elle tente d'appeler la méthode d'extension? Edit-- J'ai écrit une application de test rapide, et cela fonctionne bien!
Non, ce ne sera pas. J'ai utilisé une approche similaire dans un projet (DisposeInnotnull ()).
Nan! Étant donné que l'opérateur de points est juste du sucre syntaxique pour une méthode statique, cela fonctionne très bien. :)
C'est l'une des choses que j'ai l'aimé le plus sur les méthodes de vulgarisation. Malheureusement, dans mon projet actuel, nous travaillons sur 2,0, donc aucun choix de méthodes de vulgarisation.