.NET에서 바이트의 리터럴 접미사?


162

float 또는 double과 같은 짧은 방법으로 바이트 변수를 선언하는 방법이 있는지 궁금합니다. 내가 좋아하는 것을 의미 5f하고 5d. 물론 쓸 수 byte x = 5는 있지만 var지역 변수에 사용하면 약간 중요하지 않습니다 .


20
여기서 대부분의 사람들 var은 유일하게 유스 케이스 라고 가정 합니다. 다른 유효한 사용 사례가 있습니다. 예를 들면 다음과 같습니다 byte value = condition ? (byte)5 : (byte)6.
Hameer Abbasi 16:12에

당신의 경우에 @HameerAbbasi 갈 것입니다 var value = (byte)(condition ? 5 : 6);.
Shimmy Weitzhandler

아마 약간의 bonkers이지만, byte value = condition ? ub5 : ub6;을 정의 하면 갈 수 byte ub5 = 5, ub6 = 6;있습니다. hehe
intrepidis

@HameerAbbasi 왜 안하지 byte value = condition ? 5 : 6;?
NetMage

@NetMage 질문을 게시 할 당시에는 작동하지 않았습니다.
Hameer Abbasi

답변:


147

온 리터럴 접미사에 대한 언급이 없다 바이트에 대한 MSDN 참조 뿐만 아니라에서 C # 4.0 언어 사양 . C #에서 유일한 리터럴 접미사는 다음과 같이 정수 및 실수입니다.

u = uint
l = long
ul = ulong
f = float
m = decimal
d = double

을 사용 var하려면 항상 다음과 같이 바이트를 캐스트 할 수 있습니다var y = (byte) 5

실제로는 관련이 없지만 C # 7에서는 0b숫자가 이진 형식 임을 나타내는 새로운 이진 접두사가 도입되었습니다 . 그래도 바이트로 만들 접미사가 없습니다 (예 :

var b = 0b1010_1011_1100_1101_1110_1111; //int

21
0b1010_1011_1100_1101_1110_1111여전히입니다 Int32하지만.
BanksySan

1
해당되는 C # 7 문서에 대한 링크를 제공 할 수 있습니까 0b?
user3613932

29

그래서 지난 가을 VB에 이진 리터럴을 추가했으며 초기 테스터로부터 비슷한 피드백을 받았습니다. VB의 바이트 접미사를 추가하기로 결정했습니다. 우리는 SB (부호있는 바이트)와 UB (부호없는 바이트)를 정했다. B와 SB가 아닌 이유는 두 가지입니다.

하나, B 접미어는 16 진수 (0xFFB는 무엇을 의미합니까?)로 작성하는 경우 모호하며 'B'이외의 다른 문자가 있거나 ( 'Y'로 간주되면 F #에서 사용합니다) no .NET 바이트는 기본적으로 부호가 없으므로 B와 SB를 선택하는 것이 합리적이지만 다른 모든 접미사는 기본적으로 부호가 있으므로 B를 선택하는 다른 유형 접미사와 일치합니다. UB. 결국 우리는 명백한 SB와 UB에 갔다. -Anthony D. Green,

https://roslyn.codeplex.com/discussions/542111

분명히 그들은 VB.NET 에서이 이동을 수행 한 것으로 보이며 (지금은 릴리스되지 않을 수도 있음) 그들은 C #을 위해 roslyn에서 구현 할 수 있습니다-당신이 원하는 것으로 생각하면 투표하십시오. 가능한 구문을 제안 할 기회도 있습니다.


1
이 접미사는 여전히 MSDN 페이지 (2015 년 7 월 20 일에 업데이트 됨) 에 표시되지 않습니다 .
mbomb007

4
VS 2017에서는 여전히 구현되지 않는 것 같습니다.
Photon

2
위에서 언급 한 MSDN 페이지 (2018 년 1 월 30 일에 업데이트 됨)에 따라 : 부울, 바이트, 문자, 날짜, 개체, SByte, 짧은, UInteger, ULong 또는 UShort 데이터 형식에 대한 식별자 형식 문자가 없습니다
Pona

10

에서 MSDN 페이지, 당신의 유일한 옵션은 명시 적으로 (주조에있는 것으로 보인다 var x = (byte)5), 또는 사용을 중지 var...


9
단지 약 아닙니다 var. 예를 들면 다음과 같습니다.this.pixels[x, y] = condition ? (byte)0 : (byte)1;
John Gietzen

@JohnGietzen, 정확히! 제 경우에는 Math.Max(myByte, (byte)1)입니다. : 그리고 BTW, 당신은 당신의 예를 대체 할 수있는 this.pixels[x, y] = (byte)(condition ? 0 : 1);비트 좋네요 보이는, 또는 나에게,this.pixels[x, y] = Convert.ToByte(!condition);
흔들 Weitzhandler

속성을 사용하는 것은 어떻습니까? 예를 들어 xunit : [InlineData(1)]- [InlineData(1b)]보다 나아질 것입니다 [InlineData((byte)1)]( 1매개 변수가 nullable 바이트 인 경우 에만 예외를 던질 수 있음)
Matthias Burger

3

MSDN에 따라 10 진수, 16 진수 또는 2 진 리터럴을 사용하여 바이트를 선언 할 수 있습니다.

// decimal literal
byte x = 5;

// hex decimal literal
byte x = 0xC5;

// binary literal
byte x = 0b0000_0101;

7
네, 그러나 byte x; x = predicate ? 0x05 : 0x00;삼항 연산자의 결과가 정수이므로 오류입니다.
광자

1
@ThePhoton 당신의 권리! 내가 말할 수있는 유일한 것은 : WAT! destroyallsoftware.com/talks/wat
Adrian Toman

3
이것은 질문에 대답하지 않습니다. 질문은 바이트를 초기화하는 방법이 아니라 "바이트입니다"라고 명시 적으로 말할 수있는 방법에 관한 것입니다. 와 var x = 5, x는 INT 함께,이다 var x = 5d, x는 두 배입니다. 속성에서 숫자를 매개 변수로 사용하면 이것이 중요해집니다. double이있는 생성자는 int가있는 생성자 이외의 다른 작업을 수행 할 수 있습니다. (그렇지 않아야 할 수도 있지만 가능할 수도 있습니다). 당신의 대답으로, 당신은 그것을 초기화 할 수있는 다른 가능성만을 보여줍니다 x.
마티아스 버거

@ThePhoton VB.net 그렇게하겠습니다. Dim x As Byte x = If (predicate, & H05, & H00)
Brain2000
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.