vb.net - visual - vb net for each string
¿Cómo obtengo el índice de un objeto en un ciclo For Each... Next? (6)
AFAIK ya que esto saca el objeto de la colección, tendrías que volver a la colección para encontrarlo.
Si necesita el índice, en lugar de usar un para cada ciclo, simplemente usaría un ciclo for que pasa por los índices para que sepa lo que tiene.
Estoy usando la siguiente sintaxis para recorrer una colección de listas:
For Each PropertyActor As JCPropertyActor In MyProperty.PropertyActors
i = IndexOf(PropertyActor)
Next
¿Cómo obtengo el índice del objeto actual dentro del ciclo? Estoy usando IndexOf (PropertyActor) pero parece ineficaz ya que busca en la colección cuando ya tengo el objeto disponible.
Agregue una variable de índice que aumente usted mismo para cada iteración?
Puede ser más fácil simplemente mantener un contador separado:
i = 0
For Each PropertyActor As JCPropertyActor In MyProperty.PropertyActors
...
i = i + 1
Next
Por otro lado, Python tiene una forma conveniente de hacer esto:
for i, x in enumerate(a):
print "object at index ", i, " is ", x
Puede usar el método "FindIndex".
MyProperty.PropertyActors.FindIndex(Function(propActor As JCPropertyActor) propActor = JCPropertyActor)
Pero dentro de un ciclo para cada bucle parece una sobrecarga adicional, y parece ser el mismo problema resultante que el método "IndexOf". Sugiero usar iteración de índice pasada de moda. De esta manera tienes tu índice y tu artículo.
Dim PropertyActor As JCPropertyActor
For i As Integer = 0 To MyProperty.PropertyActors.Count - 1
PropertyActor = MyProperty.PropertyActors.Item(i)
Next
Un índice no tiene ningún significado para un IEnumerable, que es lo que usa el constructo foreach. Eso es importante porque foreach
puede no enumerar en orden de índice, si su tipo de colección particular implementa IEnumerable de una manera extraña. Si tiene un objeto al que se puede acceder por índice y le importa el índice durante una iteración, entonces es mejor que simplemente use un bucle for tradicional:
for (int i=0;i<MyProperty.PropertyActors.Length;i++)
{
//...
}
simplemente inicialice una variable entera antes de ingresar al ciclo e iterarlo ...
Dim i as Integer
For Each PropertyActor As JCPropertyActor In MyProperty.PropertyActors
i++
Next