2017-06-26 2 views
0

Essentiellement, j'ai un objet DataTableReader et j'examinais mon code pour m'assurer que tout ce qui était jetable était effectivement éliminé.Pourquoi IntelliSense n'offre pas Dispose sur DataTableReader?

DataTableReader implémente IDisposable, mais IntelliSense ne semble pas être la cueillette sur le sujet:

enter image description here

Il ne fonctionne cependant avec d'autres classes à usage unique, comme FileStream:

enter image description here

Alors, qu'est-ce qui donne? DataTableReaderIS jetable, non?

+1

Il est volontairement caché. Il hérite de Dispose() de sa classe de base, DbDataReader. La plupart des classes qui en dérivent ont quelque chose à disposer, comme SqlDataReader, car il y a une connexion dbase réelle impliquée. Mais DataTableReader ne le fait pas, DataTable est toute la mémoire. –

+0

@HansPassant Alors la suppression de DataTableReader est inutile? – MPelletier

+1

Ça ne fait rien. Beaucoup de programmeurs n'ont jamais sciemment appelé Dispose(), mais nous avons tendance à les entendre à SO. Beaucoup de programmeurs préfèrent toujours appeler Dispose() parce qu'ils ne savent pas ce qu'il fait et ils ont été mordus avant. Certains programmeurs évitent d'écrire du code inutile. Restez en dehors du premier groupe et vous n'aurez jamais à être désolé. –

Répondre

1

C'est parce que la méthode de DisposeDbDataReader a le EditorBrowsableAttribute ensemble à jamais dire essentiellement VS pour ne pas le montrer. Pourquoi? Je ne suis pas sûr.

[EditorBrowsableAttribute(EditorBrowsableState.Never)] 
public void Dispose() { 
    Dispose(true); 
} 

protected virtual void Dispose(bool disposing) { 
    if (disposing) { 
     Close(); 
    } 
} 

Source: https://referencesource.microsoft.com/#System.Data/System/Data/Common/DbDataReader.cs,f7c2de36229de361

0

dotPeek révèle ceci pour DbDataReader, la classe parente de DataTableReader:

[EditorBrowsable(EditorBrowsableState.Never)] 
public void Dispose() 

Voilà pourquoi ...