Si los cuerpos de bucle no producen un efecto secundario sino que simplemente buscan el primer valor donde "algo" es verdadero, entonces se solucionaría el problema eliminando todos los bucles en primer lugar.
var query = from I in Enumerable.Range(0, 10)
from A in Enumerable.Range(0, 10)
from B in Enumerable.Range(0, 10)
where something(I, A, B)
select new { I, A, B };
var result = query.FirstOrDefault();
if (result == null)
{
Console.WriteLine("no result");
}
else
{
Console.WriteLine("The first result matching the predicate was {0} {1} {2},
result.I, result.A, result.B);
}
Pero no haga esto si los bucles tienen efectos secundarios; las consultas son realmente un mal lugar para poner efectos secundarios. Si el bucle interno tiene un efecto secundario, entonces puede hacer algo como esto:
var triples = from I in Enumerable.Range(0, 10)
from A in Enumerable.Range(0, 10)
from B in Enumerable.Range(0, 10)
select new { I, A, B };
foreach(var triple in triples)
{
if (something(triple.I, triple.A, triple.B))
break;
DoSomeSideEffect(triple.I, triple.A, triple.B);
}
y ahora hay un solo bucle de romper, no tres.
tenga en cuenta que su "arreglo" actual aún continúa el ciclo medio, lo que puede implicar más iteraciones del ciclo interno. Necesitarías 'I = A = 10;' –
agregar un bool y verificarlo? – Foresp
¿Cómo puede no ser un duplicado? – ripper234