使用字节文字

时间:2009-12-07 12:25:10

标签: vb.net byte type-safety

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

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

它不会编译,因为编译器将2552解释为整数而不是字节,从而生成类型Integer的结果。不幸的是,there is no Byte type character,所以我不能只写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。第二个以整数执行计算,然后将结果转换为Byte,这是正常的,但不如纯字节操作那么优雅。第三种解决方法不需要CByte,但它的缺点很明显。

我是否错过了一些(优雅的)第四选项,它允许我在不使用CBool​​s混乱我的公式的情况下进行Byte-only-math?

3 个答案:

答案 0 :(得分:4)

在Visual Basic语言规范第2.4.2节中具体提到:

  

<强>注释   &GT;没有类型   Byte的字符因为最多   自然特征是B,也就是   十六进制的合法字符   文字。

嗯,我猜是的。毫无疑问,“Octet”也被投了票。使用Return CByte(...),它比ToByte()便宜。

答案 1 :(得分: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

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

答案 2 :(得分:0)

简单方法怎么样:

Imports System.Convert

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

编辑:我更喜欢这种解决方法,因为它会减少投射,我很清楚发生了什么。