문제

다음 함수를 사용하여 색상 값을 밝게합니다 (코드의 람다이지만 차이가되어서는 안됩니다).

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디. 두 번째는 정수에서 계산을 수행 한 다음 결과를 바이트로 변환합니다. 이는 괜찮지 만 순수한 바이트 작업만큼 우아하지는 않습니다. 세 번째 해결 방법은 필요하지 않습니다 CBytes이지만 단점은 분명합니다.

CBools와 공식을 어수선하지 않고 바이트 전용을 할 수있는 (우아한) 네 번째 옵션을 놓쳤습니까?

도움이 되었습니까?

해결책

시각적 기본 언어 사양, 2.4.2 장에서 구체적으로 언급되어 있습니다.

주석 > 가장 자연스러운 캐릭터는 B이기 때문에 바이트의 유형 문자는 없습니다.

글쎄, 그게 사실이야. "Octet"도 의심 할 여지없이 투표했습니다. 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