質問

次の関数を使用して色の値を明るくしています(コードではラムダですが、違いはありません)。

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

最初のものは単純に醜くて読みにくいです。 リテラルである必要があります CByted.2 番目のメソッドは、整数で計算を実行し、結果をバイトに変換します。これは問題ありませんが、純粋なバイト操作ほど洗練されていません。3 番目の回避策では必要ありません CByteただし、欠点は明らかです。

CBool​​s で数式を乱雑にすることなくバイトのみの計算を実行できる (エレガントな) 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

編集: 私はこの回避策を好みます。なぜなら、キャストの回数が減り、何が起こっているのかが非常に明確になるからです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top