質問
次の関数を使用して色の値を明るくしています(コードではラムダですが、違いはありません)。
Function ReduceDistanceTo255(ByVal i As Byte) As Byte
Return i + (255 - i) \ 2
End Function
コンパイラが解釈するため、コンパイルされません。 255
そして 2
バイトではなく整数として、結果は次のタイプになります Integer
. 。残念ながら、 Byte型文字はありません, と書くわけにはいきません。 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.2 番目のメソッドは、整数で計算を実行し、結果をバイトに変換します。これは問題ありませんが、純粋なバイト操作ほど洗練されていません。3 番目の回避策では必要ありません CByte
ただし、欠点は明らかです。
CBools で数式を乱雑にすることなくバイトのみの計算を実行できる (エレガントな) 4 番目のオプションを見逃していませんか?
解決
これについては、Visual Basic 言語仕様の第 2.4.2 章で具体的に説明されています。
注釈 >最も自然なキャラクターはBであるため、BYTEのタイプの文字はありません。これは、六文学の文字通りの法的キャラクターです。
まあ、それは本当だと思います。「オクテット」も否決されたのは間違いない。Return CByte(...) を使用すると、ToByte() よりも安価になります。
他のヒント
定数を使用してみてはどうでしょうか。
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
変換、キャスト、追加の変数はありません
簡単な方法はどうでしょうか:
Imports System.Convert
Function ReduceDistanceTo255(ByVal i As Byte) As Byte
Return ToByte(i + (255 - i) \ 2)
End Function
編集: 私はこの回避策を好みます。なぜなら、キャストの回数が減り、何が起こっているのかが非常に明確になるからです。
所属していません StackOverflow