O que é o sufixo (carácter tipo) para “Byte” constantes numéricas em VB.NET?
Pergunta
Só por curiosidade:
Eu sei que posso dizer ao compilador se eu quiser um valor a ser interpretado como um certo tipo numérico, por exemplo, como Integer (32 bit assinado), dessa maneira acrescentando um "I" (tipo de personagem) para o valor constante:
Private Function GetTheAnswerAsInteger() As Integer
Return 42I
End Function
Há também "S" para breve, "D" para Decimal, etc.
Mas o que é o sufixo para Byte ? Dica: não é o óbvio "B" ...
Solução
Não há um. Se você precisa distinguir entre um inteiro e um byte (por exemplo, para chamar uma sobrecarga apropriada) para uma constante, você precisa elenco.
(O mesmo é verdade em C #, por sinal.)
Byte não tem caráter tipo literal ou identificador de carácter tipo.
Há também um lista de caracteres de tipo e literal sufixos .
Outras dicas
Então, nós adicionamos literais binários em VB no outono passado e obteve um feedback semelhante desde os primeiros testadores. Nós fez decidir adicionar um sufixo para byte de VB. Nós liquidada em SB (por byte assinado) e UB (para byte não assinado). O motivo não é apenas B e SB é duplo.
One, o sufixo B é ambíguo se você estiver escrevendo em hexadecimal (o que não 0xFFB significa?) e até mesmo se tivéssemos uma solução para isso, ou de outra personagem de 'B' ( 'Y' foi considerado, F # utiliza este) ninguém poderia lembre-se o padrão foi assinado ou Não-assinado - .NET bytes são unsigned por padrão, então não faria sentido para escolher B e SB mas todos outros sufixos são assinados por padrão de modo que seria consistente com outros sufixos tipo de pegar B e UB. No final, fomos para inequívoca SB e UB. - Anthony D. Green,
https://roslyn.codeplex.com/discussions/542111
Ele foi integrado à liberação VB.NET próximo, e este é o caminho que vai funcionar:
Public Const MyByte As Byte = 4UB;
Public Const MyByte2 As SByte = 4SB;
Esta resposta não realmente fornecer um sufixo, mas é tão perto quanto ele ganha.
Se você definir um método de extensão como
Imports System.Runtime.CompilerServices
Module IntegerExtensions
<Extension()> _
Public Function B(ByVal iNumber As Integer) As Byte
Return Convert.ToByte(iNumber)
End Function
End Module
Você pode usá-lo como este:
Private Function GetTheAnswerAsByte() As Byte
Return 42.B
End Function
Não há nenhuma literal byte em .NET.