yield nada

27/04/2005 - 16:38 por Alfredo Novoa | Informe spam
Hola,

Tengo un pequeño problema con los iteradores.

Tengo muchas clases que implementan IEnumerable<T> y una de ellas
representa al conjunto vacío y siempre tiene 0 elementos, por lo que
GetEnumerator debería de implementarse así:

public override IEnumerator<Value> GetEnumerator()
{
}

Pero esto no compila y en su lugar tengo que hacer algo como esto:

public override IEnumerator<Value> GetEnumerator()
{
if (false)
yield return null;
}

Que es una clara chapuza pero funciona perfectamente.


¿A alguien se le ocurre una solución mejor?

Y no me vale que me digais que no use una clase colección que siempre
tiene 0 elementos.


Saludos y gracias anticipadas.
 

Leer las respuestas

#1 Octavio Hernandez
27/04/2005 - 18:17 | Informe spam
Alfredo,

Creo que en ese caso lo adecuado es poner

yield break;

en el cuerpo del método.

Sorprendente tu manera de engañar al compilador con el if (false) etc.
¿Compila eso? En mi installación (C# Express Beta 1) no compila. Si tienes
la beta 2 y eso compila habría que reportarlo a MS!

Slds,

Octavio
"Alfredo Novoa" escribió en el mensaje
news:

Hola,

Tengo un pequeño problema con los iteradores.

Tengo muchas clases que implementan IEnumerable<T> y una de ellas
representa al conjunto vacío y siempre tiene 0 elementos, por lo que
GetEnumerator debería de implementarse así:

public override IEnumerator<Value> GetEnumerator()
{
}

Pero esto no compila y en su lugar tengo que hacer algo como esto:

public override IEnumerator<Value> GetEnumerator()
{
if (false)
yield return null;
}

Que es una clara chapuza pero funciona perfectamente.


¿A alguien se le ocurre una solución mejor?

Y no me vale que me digais que no use una clase colección que siempre
tiene 0 elementos.


Saludos y gracias anticipadas.

Preguntas similares