2010-08-27 8 views
15

Me preguntaba, ¿cuándo puedo usar exactamente el ciclo foreach? ¿Debo implementar IEnumerable?¿Se requiere IEnumerable para usar un bucle foreach?

+6

[primera respuesta] (http://msdn.microsoft.com/fr-fr/library/ttw7t8t6%28VS.80%29.aspx) en Google. – pascal

+0

http://msdn.microsoft.com/en-us/library/9yb8xew9(VS.80).aspx – Dave

+12

Puede usarlos los martes y jueves y durante el quinto fin de semana de un mes calendario. –

Respuesta

2

Usted puede forEach aunque cualquier objeto que implemente IEnumerable o IEnumberable<T>

37

No hay necesidad de implementar la interfaz IEnumerable utilizar la instrucción foreach. Aquí es una cita de la MSDN (http://msdn.microsoft.com/en-us/library/9yb8xew9.aspx):

En C#, no es absolutamente necesario para una clase de colección de heredar de IEnumerable y IEnumerator con el fin para ser compatible con foreach. Siempre y cuando tenga los GetEnumerator, MoveNext, Reset y miembros actuales, funcionará con foreach. Omitir las interfaces tiene la ventaja de permitirle definir el tipo de retorno de Corriente a ser más específico que Objeto, que proporciona seguridad de tipo.

+0

Me gusta porque dice correctamente que 'IEnumerable' no es requerido. Sin embargo, hace la vida más fácil. –

+4

Eso es realmente interesante, y yo no sabía eso. Pero supongo que esto fue principalmente para apoyar la seguridad del tipo en .NET 1.0. Diría que la mejor manera de garantizar la seguridad de tipo hoy en día es usar la versión genérica de IEnumerable. –

+0

+1 Aprendiendo algo nuevo todos los días. – BoltClock

2

preguntarse - es lo que realmente necesita un contador de bucle

La regla de oro que uso es determinar si estoy datos entre dos contenedores indexados, donde la verdad es que moviendo necesita un valor de índice para dirigirse al destino, o más generalmente, '¿necesito un recuento de índice para cada artículo que estoy procesando en el ciclo'? En esos casos, utilizo un bucle for, en casi todos los demás casos (donde foreach puede tratar con el contenedor, que como se señaló anteriormente es prácticamente cualquier contenedor) - la razón es bastante simple, parece bastante estúpido usar foreach y entonces tiene que tomarse la molestia de mantener manualmente un contador de bucle.

Cuestiones relacionadas