Necesito hacer alguna operación con todas las combinaciones de características en dos FeatureClasses. El operador de iteración "for" es muy, muy lento, así que decidí probar con el operador "while" y usar FeatureCursor. Así que la iteración anidada que tengo como abajo:
IFeatureCursor fcur1 = fc1.Search(null, false);
IFeatureCursor fcur2 = fc2.Search(null, false);
IFeature f1 = fcur1.NextFeature();
IFeature f2 = fcur2.NextFeature();
while (f1 != null)
{
//external cycle code
MessageBox.Show("external cycle FID " + f1.Value[0].ToString());
while (f2 != null)
{
//internal cycle code
MessageBox.Show("internal cycle FID " + f1.Value[0].ToString());
f2 = fcur2.NextFeature();
}
f1 = fcur1.NextFeature();
}
Por ejemplo, hay 3 características en cada FeatureClass fc1 y fc2.
Utilizo un MessageBoxes para mostrar el FID de la característica f1 para entender lo que ocurre en las iteraciones externas e internas.
El orden esperado de los MessageBoxes es:
external cycle FID 0
internal cycle FID 0
internal cycle FID 0
internal cycle FID 0
external cycle FID 1
internal cycle FID 1
internal cycle FID 1
internal cycle FID 1
external cycle FID 2
internal cycle FID 2
internal cycle FID 2
internal cycle FID 2
Pero el resultado de mi código es:
external cycle FID 0
internal cycle FID 0
internal cycle FID 0
internal cycle FID 0
external cycle FID 1
external cycle FID 2
Por lo tanto, el ciclo externo opera con todas las características f1, pero el ciclo interno sólo obtiene la primera característica f1. ¿Por qué otra característica f1 no va al ciclo interno?