Недавно я перешел с VB на С#, поэтому часто использовал конвертер С# в VB.NET, чтобы понять различия в синтаксисе. При перемещении следующего метода к VB я заметил интересную вещь.
исходный код С#:
public bool ExceedsThreshold(int threshold, IEnumerable<bool> bools)
{
int trueCnt = 0;
foreach(bool b in bools)
if (b && (++trueCnt > threshold))
return true;
return false;
}
Результат VB.NET:
Public Function ExceedsThreshold(threshold As Integer, bools As IEnumerable(Of Boolean)) As Boolean
Dim trueCnt As Integer = 0
For Each b As Boolean In bools
If b AndAlso (System.Threading.Interlocked.Increment(trueCnt) > threshold) Then
Return True
End If
Next
Return False End Function
Оператор С# ++
заменен на System.Threading.Interlocked.Increment
Означает ли это, что не потокобезопасный оператор ++
становится поточным, если используется в цикле foreach
? Это своего рода синтаксический сахар? Если это так, то почему конвертер разместил Interlocked.Increment
в версии VB? Я думал, что foreach как в С#, так и в VB работает точно так же. Или это просто конвертер "страхование"?