A modulo operation performed on an integer type always returns 0. This happens because its right operand is represented by the value 1 (-1), which is most likely a typo.
A common pattern of this error is checking if no remainder is left after dividing a value by 2. To do this, you use the modulo operation and compare the result with 0 or 1. Making a typo at this point is easy because since you anticipate the value 1, you may accidentally divide by 1 too. For example:
if ((x % 1) == 1) { .... }
The programmer wrote the value 1 instead of 2, which will result in the 'x % 1' expression always evaluating to 0 no matter the value of 'x'. Therefore, the condition will always be false.
Fixed code:
if ((x % 2) == 1) { .... }
The following example was taken from a real-life application:
const int SyncReportFrequency = 1; .... private void TimerOnElapsed(object sender, ElapsedEventArgs e) { if (_reportId % SyncReportFrequency == 0) { WriteSyncReport(); } }
The 'SyncReportFrequency ' is a constant equal to 1, so regardless of the value of the '_reportId' variable, the condition of the 'if' statement will always be true.
It is either that the developer made a typo in this code or the condition is superfluous. Fixed version:
const int SyncReportFrequency = 2; .... private void TimerOnElapsed(object sender, ElapsedEventArgs e) { if (_reportId % SyncReportFrequency == 0) { WriteSyncReport(); } }
This diagnostic is classified as: