Я использую следующую функцию, чтобы сделать цвета ярче (это лямбда-код в моем коде, но это не должно отличаться):
Function ReduceDistanceTo255(ByVal i As Byte) As Byte
Return i + (255 - i) \ 2
End Function
Он не будет компилироваться, так как компилятор интерпретирует 255
и 2
как целые числа, а не байты, получая результат типа Integer
. К сожалению, нет символа типа Байт , поэтому я не могу просто написать 255B
или что-то в этом роде.
Есть несколько очевидных путей решения проблемы:
Function ReduceDistanceTo255(ByVal i As Byte) As Byte
Return i + (CByte(255) - i) \ CByte(2)
End Function
и
Function ReduceDistanceTo255(ByVal i As Byte) As Byte
Return CByte(i + (255 - i) \ 2)
End Function
и
Function ReduceDistanceTo255(ByVal i As Byte) As Byte
Dim FF As Byte = 255
Dim two As Byte = 2
Return i + (FF - i) \ two
End Function
Первый просто уродлив и труден для чтения, потому что каждый литерал должен быть CByte
d. Второй выполняет вычисления в целых числах, а затем преобразует результат в байт, что нормально, но не так элегантно, как операция с чистыми байтами. Третий обходной путь не требует CByte
с, но его недостатки очевидны.
Я пропустил какой-то (элегантный) четвертый вариант, который позволяет мне выполнять только байтовую математику, не загромождая мою формулу CBools?