Examples of errors detected by the V3020 diagnostic
V3020. An unconditional 'break/continue/return/goto' within a loop.
.NET Core Libraries (CoreFX)
V3020 An unconditional 'return' within a loop. Enumerable.cs 517
public override bool MoveNext()
{
switch (state)
{
case 1:
_enumerator = _source.GetEnumerator();
state = 2;
goto case 2;
case 2:
while (_enumerator.MoveNext())
{
current = _selector(_enumerator.Current);
return true;
}
Dispose();
break;
}
return false;
}
Similar errors can be found in some other places:
- V3020 An unconditional 'return' within a loop. JsonDataContract.cs 128
Space Engineers
V3020 An unconditional 'continue' within a loop. Sandbox.Game MyRenderComponentThrust.cs 109
public override void Draw()
{
....
foreach (var flame in m_thrust.Flames)
{
if (m_thrust.CubeGrid.Physics == null)
continue;
....
if (m_landingEffect != null)
{
m_landingEffect.Stop(true);
m_landingEffect = null;
--m_landingEffectCount;
}
continue; // <=
....
if (m_landingEffect == null)
continue;
....
}
}
FlashDevelop
V3020 An unconditional 'break' within a loop. AirWizard.cs 1760
private void ExtensionBrowseButton_Click(....)
{
....
foreach (var existingExtension in _extensions)
{
if (existingExtension.ExtensionId
== extensionId) extension = existingExtension;
break;
}
....
}
Mono
V3020 An unconditional 'throw' within a loop. System.Data.Linq-net_4_x XmlMappingSource.cs 180
public void ReadEmptyContent(XmlReader r, string name)
{
....
for (r.MoveToContent();
r.NodeType != XmlNodeType.EndElement;
r.MoveToContent())
{
if (r.NamespaceURI != DbmlNamespace)
r.Skip();
throw UnexpectedItemError(r); // <=
}
....
}
Media Portal 2
V3020 An unconditional 'break' within a loop. XmlCacheProvider.cs 433
public TvdbSeries LoadSeriesFromCache(int seriesId)
{
....
foreach (TvdbEpisode e in series.Episodes.Where(....))
{
if (epImageFile.Contains("thumb"))
e.Banner.LoadThumb(Image.FromFile(epImageFile));
else
e.Banner.LoadBanner(Image.FromFile(epImageFile));
break;
}
....
}
Unity C# reference source code
V3020 CWE-670 An unconditional 'return' within a loop. PolygonCollider2DEditor.cs 96
private void HandleDragAndDrop(Rect targetRect)
{
....
foreach (....)
{
....
if (....)
{
....
}
return;
}
....
}
Infer.NET
V3020 An unconditional 'break' within a loop. Compiler DefaultFactorManager.cs 474
private static Set<StochasticityPattern>
IntersectPatterns(IEnumerable<StochasticityPattern> patterns)
{
Set<StochasticityPattern> result = new Set<StochasticityPattern>();
result.AddRange(patterns);
bool changed;
do
{
int count = result.Count;
AddIntersections(result);
changed = (result.Count != count);
break;
} while (changed);
return result;
}
Similar errors can be found in some other places:
- V3020 An unconditional 'break' within a loop. Visualizers.Windows FactorManagerView.cs 350
FastReport
V3020 An unconditional 'return' within a loop. CodeUtils.cs 262
public static string GetExpression(FindTextArgs args, bool skipStrings)
{
while (args.StartIndex < args.Text.Length)
{
if (!FindMatchingBrackets(args, skipStrings))
break;
return args.FoundText;
}
return "";
}
Telerik UI for UWP
V3020 An unconditional 'break' within a loop. NodePool.cs 189
public IEnumerable<KeyValuePair<int, List<T>>> GetUnfrozenDisplayedElements()
{
foreach (var item in this.generatedContainers)
{
foreach (var pair in item.Value)
{
if (!pair.IsFrozen)
{
yield return item;
}
break;
}
}
}
LINQ to DB
V3020 An unconditional 'return' within a loop. QueryRunner.cs 751
static T ExecuteElement<T>(
Query query,
IDataContext dataContext,
Mapper<T> mapper,
Expression expression,
object?[]? ps,
object?[]? preambles)
{
using (var runner = dataContext.GetQueryRunner(query, 0, expression, ps,
preambles))
{
using (var dr = runner.ExecuteReader())
{
while (dr.Read())
{
var value = mapper.Map(dataContext, runner, dr);
runner.RowsCount++;
return value;
}
}
return Array<T>.Empty.First();
}
}
Orleans
V3020 An unconditional 'return' within a loop. InMemoryTransportListenerFactory.cs 117
public async ValueTask<ConnectionContext> AcceptAsync(....)
{
if (await _acceptQueue.Reader.WaitToReadAsync(....))
{
while (_acceptQueue.Reader.TryRead(out var item))
{
var remoteConnectionContext = item.Connection;
var localConnectionContext = ....
item.ConnectionAcceptedTcs.TrySetResult(true);
return localConnectionContext; // <=
}
}
return null;
}
Orleans
V3020 An unconditional 'return' within a loop. OrleansGeneratedCodeHelper.cs 99
public static TService UnwrapService<TService>(object caller, TService service)
{
while ( service is IServiceHolder<TService>
&& caller is TService callerService)
{
return callerService;
}
....
}
SanAndreasUnity
V3020 An unconditional 'break' within a loop. PlayerController.cs 258
private void OnDrawGizmosSelected()
{
....
var vehicles = FindObjectsOfType<Vehicle>()
.Where(....)
.OrderBy(....)
.ToArray();
foreach (var vehicle in vehicles)
{
foreach (var seat in vehicle.Seats){....}
var closestSeat = vehicle.GetSeatAlignmentOfClosestSeat(transform.position);
if (closestSeat != Vehicle.SeatAlignment.None){....}
break;
}
}
SanAndreasUnity
V3020 An unconditional 'break' within a loop. LatencySimulation.cs 220
public override void ClientLateUpdate()
{
while (reliableClientToServer.Count > 0)
{
QueuedMessage message = reliableClientToServer[0];
if (message.time <= Time.unscaledTime)
{
wrap.ClientSend(new ArraySegment<byte>(message.bytes), Channels.Reliable);
reliableClientToServer.RemoveAt(0);
}
break;
}
....
}
nopCommerce
V3020 An unconditional 'return' within a loop. ConcurrentTrie.cs 230
protected virtual TrieNode GetOrAddNode(ReadOnlySpan<char> key,
TValue value,
bool overwrite = false)
{
....
while (!node.IsDeleted && node.Children.TryGetValue(c, out nextNode))
{
var label = nextNode.Label.AsSpan();
var i = GetCommonPrefixLength(label, suffix);
// suffix starts with label?
if (i == label.Length)
{
// if the keys are equal, the key has already been inserted
if (i == suffix.Length)
{
if (overwrite)
nextNode.SetValue(value);
return nextNode;
}
// structure has changed since last; try again
break;
}
....
return outNode; // <=
}
....
}