Dans l'exemple ci-dessous, si le code client utilisant GetPeople voulait imprimer le nom et l'âge de chaque personne sur la console, il devrait utiliser reflet (je suppose) pour déterminer que cette requête contenait un IEnumerable (Of Person). en tant que tel pour obtenir à ses propriétés.Quand, le cas échéant, IEnumerable doit-il être utilisé sur IEnumerable <T>?
Public Function GetPeople() As IEnumerable
Dim query = From p As Person In People.AsEnumerable() _
Select p
Return query
End Function
La forme générique de IEnumerable semble beaucoup plus instructif et utile aux clients:
Public Function GetPeople() As IEnumerable(Of Person)
Dim query = From p As Person In People.AsEnumerable() _
Select p
Return query
End Function
Je suis sûr qu'il ya une raison - alors, pourquoi IEnumerable jamais favorisée par rapport à IEnumerable (Of T) ?
Merci.
Généralement, j'implémente IEnumerable.GetEnumerator() en tant qu'implémentation d'interface explicite, et j'ai IEnumerable .GetEnumerator() en tant qu'implémentation implicite. De cette façon, il est toujours compatbile en arrière (pour le code non générique) mais en utilisant la classe normalement est entièrement générique –
thecoop