1

我正在使用以下函数来增亮颜色值(它是我的代码中的 lambda,但这不应该有所不同):

Function ReduceDistanceTo255(ByVal i As Byte) As Byte
    Return i + (255 - i) \ 2
End Function

它不会编译,因为编译器将255and解释2为整数而不是字节,从而产生 type 的结果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

第一个只是丑陋且难以阅读,因为每个文字都需要CByted。第二个以整数进行计算,然后将结果转换为字节,这还可以,但不如纯字节操作那么优雅。第三种解决方法不需要CBytes,但它的缺点很明显。

我是否错过了一些(优雅的)第四个选项,它允许我做 Byte-only-math 而不会用 CBool​​s 弄乱我的公式?

4

3 回答 3

4

它在 Visual Basic 语言规范第 2.4.2 章中特别提到:

注释 > Byte 没有类型字符,因为最自然的字符是 B,它是十六进制文字中的合法字符。

嗯,我猜这是真的。毫无疑问,“八重奏”也被否决了。使用 Return CByte(...),它比 ToByte() 便宜。

于 2009-12-07T13:11:12.350 回答
1

如何使用常量:

Function ReduceDistanceTo255(ByVal i As Byte) As Byte
  Const bFF As Byte = 255    
  Const b02 As Byte = 2
  Return i + (bFF - i) \ b02
End Function

没有转换,没有强制转换,没有额外的变量

于 2011-08-05T02:52:18.753 回答
0

简单的方法怎么样:

Imports System.Convert

Function ReduceDistanceTo255(ByVal i As Byte) As Byte
    Return ToByte(i + (255 - i) \ 2)
End Function

编辑:我更喜欢这种解决方法,因为它会减少演员阵容,而且我很清楚发生了什么。

于 2009-12-07T12:32:29.013 回答