Тема: Арифметичні операції в VB.NET змінюють тип змінної

Є змінна myVariable з типом UInt32. Хочу написати

myVariable += 1

але Visual studio попереджує мене що

Option Strict On disallows implicit conversions from 'Long' to 'UInteger'

і пропонує отаке виправлення:

myVariable = CUInt(myVariable + 1)

WTF?

2 Востаннє редагувалося koala (15.08.2018 15:14:25)

Re: Арифметичні операції в VB.NET змінюють тип змінної

https://docs.microsoft.com/en-us/dotnet … or-results
Якщо участь беруть беззнаковий операнд та знаковий операнд, результат буде знаковим типом із діапазоном не меншим, ніж у кожного з операндів.

Оригінал

If an unsigned operand participates with a signed operand, the result has a signed type with at least as large a range as either operand.

А тепер стежимо за ручками: маєте UInt32 і - несподівано - Integer зі значенням 1. Межа значень UInt32 - 0..2**32, Integer - -2**31...2**31-1. Результат має вміщатися в -2**31..2**32, а це... Long.
Який вихід? Проголосити літерал типу UInt32:

myVariable += 1ui
Прихований текст

Хтось користується цим жахом?

Подякували: leofun01, javascriptIsLife2

3 Востаннє редагувалося leofun01 (15.08.2018 15:33:07)

Re: Арифметичні операції в VB.NET змінюють тип змінної

dotnet/visual-basic/ #forced-literal-types.

myVariable += 1UI