Что такое суффикс (символ типа) для числовых констант "Byte" в VB.NET?
Просто из любопытства:
Я знаю, что могу сообщить компилятору, хочу ли я, чтобы значение интерпретировалось как определенный числовой тип, например. как Integer (32-разрядная подпись), таким образом добавляя "I" (тип символа) к постоянному значению:
Private Function GetTheAnswerAsInteger() As Integer
Return 42I
End Function
Там также "S" для Short, "D" для Decimal и т.д.
Но что такое суффикс для байта? Подсказка: это не очевидный "B"...
Ответы
Ответ 1
Нет. Если вам нужно различать целое число и байт (например, чтобы вызвать соответствующую перегрузку) для константы, вам нужно сделать бросок.
(То же самое верно и для С#).
MSDN обеспечивает подтверждение:
Байт не имеет символа буквального типа или идентификатор типа.
Также существует список символов типа и буквенных суффиксов.
Ответ 2
Итак, мы добавили бинарные литералы в VB прошлой осенью и получили аналогичную обратную связь от ранних тестеров. Мы решили добавить суффикс для байта для VB. Мы (для подписанного байта) и UB (для байта без знака). Причина это не только B и SB в два раза.
Во-первых, суффикс B является двусмысленным, если вы пишете в шестнадцатеричном виде (что означает 0xFFB?) и даже если у нас есть решение для этого или другое символ "B" ( "Y" считался, F # использует это) никто не мог помните, было ли значение по умолчанию подписано или без знака -.NET байты без знака по умолчанию, поэтому было бы целесообразно выбрать B и SB, но все другие суффиксы подписаны по умолчанию, поэтому он будет согласован с другими суффиксами типа для выбора B и UB. В итоге мы пошли однозначные SB и UB. - Энтони Д. Грин,
https://roslyn.codeplex.com/discussions/542111
Он был интегрирован в предстоящую версию VB.NET, и так он будет работать:
Public Const MyByte As Byte = 4UB;
Public Const MyByte2 As SByte = 4SB;
Ответ 3
Этот ответ на самом деле не содержит суффикса, но он как можно ближе к нему.
Если вы определяете метод расширения как
Imports System.Runtime.CompilerServices
Module IntegerExtensions
<Extension()> _
Public Function B(ByVal iNumber As Integer) As Byte
Return Convert.ToByte(iNumber)
End Function
End Module
Вы можете использовать его следующим образом:
Private Function GetTheAnswerAsByte() As Byte
Return 42.B
End Function
Ответ 4
В .NET нет литерала байта.