V3150. Loop break conditions do not depend on the number of iterations.
The analyzer has detected a loop whose termination conditions do not depend on the number of iterations. Such a loop can iterate 0, 1, or an infinite number of times.
Consider the following example of such a loop:
void Foo(int left, int right)
{
while(left < right)
{
Bar();
}
}
The problem is with the while loop: the variables being checked in the condition do not change; therefore, the loop will either never terminate or never start.
Here is another example of code that would trigger this diagnostic. A loop may become infinite if you forget to rethrow an exception in the 'try-catch' block down the stack:
while (condition)
{
try {
if(Foo())
{
throw new Exception();
}
}
catch (Exception ex)
{
....
}
}
To have this loop terminate on throwing the exception, you can, for example, rethrow this exception from the catch section using the throw statement:
while (condition)
{
try {
if(Foo())
{
throw new Exception();
}
}
catch (Exception ex)
{
....
throw;
}
}