Что такое суффикс (тип символа) для & # 8220; Байта & # 8221; числовые константы в VB.NET?
Вопрос
Просто из любопытства:
Я знаю, что могу сказать компилятору, если я хочу, чтобы значение интерпретировалось как определенный числовой тип, например как целое число (32-битная подпись), таким образом добавляя «I» (введите символ) в постоянное значение:
Private Function GetTheAnswerAsInteger() As Integer
Return 42I
End Function
Там также есть "S" для краткости "D" для десятичной дроби и т. д.
Но что такое суффикс для байта ? Подсказка: это не очевидный "B" ...
Решение
Там нет ни одного. Если вам необходимо различать целое число и байт (например, чтобы вызвать соответствующую перегрузку) для константы, вам необходимо выполнить приведение.
(Кстати, то же самое относится и к C #.)
MSDN предоставляет подтверждение:
Байт не имеет буквенного типа символа или идентификатор типа символа.
Существует также список символов типа и буквенных суффиксов . р>
Другие советы
Итак, мы добавили двоичные литералы в VB прошлой осенью и получили схожие отзывы от ранних тестеров. Мы решили добавить суффикс для байта для VB. Мы устанавливается на SB (для подписанного байта) и UB (для неподписанного байта). Причина это не просто B и SB в два раза. Р>
Во-первых, суффикс B неоднозначен, если вы пишете в шестнадцатеричном формате (что означает 0xFFB?) и даже если бы у нас было решение для этого, или другое символ «B» (считалось «Y», F # использует это), никто не мог помните, было ли значение по умолчанию подписано или без знака - байты по умолчанию без знака, так что имеет смысл выбрать 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;
В этом ответе нет суффикса, но он настолько близок, насколько это возможно.
Если вы определяете метод расширения как
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
В .NET нет байтового литерала.