Какой суффикс (символ типа) для числовых констант "Byte" в VB.NET? - PullRequest
25 голосов
/ 31 октября 2008

Просто из любопытства:

Я знаю, что могу сказать компилятору, если я хочу, чтобы значение интерпретировалось как определенный числовой тип, например как целое число (32-разрядное знаковое), добавляя к постоянному значению «I» (символ типа):

Private Function GetTheAnswerAsInteger() As Integer

   Return 42I

End Function

Есть также "S" для короткого, "D" для десятичного и т. Д.

Но что такое суффикс для байта ? Подсказка: это не очевидный "B" ...

Ответы [ 4 ]

31 голосов
/ 31 октября 2008

Нет ни одного. Если вам нужно различать целое число и байт (например, чтобы вызвать соответствующую перегрузку) для константы, вам нужно привести.

(Кстати, то же самое в C #).

MSDN предоставляет подтверждение:

Байт не имеет буквенного типа символа или идентификатор типа символа.

Также имеется список символов типа и буквенных суффиксов .

6 голосов
/ 04 января 2015

Итак, мы добавили двоичные литералы в VB прошлой осенью и получили схожие отзывы от ранних тестеров. Мы решили добавить суффикс для байта для VB. Мы устанавливается на SB (для подписанного байта) и 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;
5 голосов
/ 20 декабря 2013

Этот ответ на самом деле не дает суффикса, но он настолько близок, насколько это возможно.

Если вы определяете метод расширения как

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
3 голосов
/ 31 октября 2008

В .NET нет байтового литерала.

...