Qual è il suffisso (carattere di tipo) per le costanti numeriche "Byte" in VB.NET?
Domanda
Solo per curiosità:
So di poter dire al compilatore se voglio che un valore venga interpretato come un certo tipo numerico, ad es. come intero (con segno a 32 bit), in questo modo aggiungendo un "I" (carattere carattere) al valore costante:
Private Function GetTheAnswerAsInteger() As Integer
Return 42I
End Function
C'è anche " S " per Short, "D" per Decimale, ecc.
Ma qual è il suffisso per Byte ? Suggerimento: non è quello ovvio "B" ...
Soluzione
Non ce n'è uno. Se devi distinguere tra un numero intero e un byte (ad es. Per chiamare un sovraccarico appropriato) per una costante, devi eseguire il cast.
(Lo stesso vale in C #, comunque.)
Il byte non ha caratteri di tipo letterale o carattere tipo identificatore.
Esiste anche un elenco di caratteri di tipo e suffissi letterali .
Altri suggerimenti
Quindi, abbiamo aggiunto letterali binari in VB lo scorso autunno e abbiamo ottenuto un feedback simile dai primi tester. Abbiamo deciso di aggiungere un suffisso per byte per VB. Noi impostato su SB (per byte con segno) e UB (per byte senza segno). La ragione non è solo B e SB è duplice.
Uno, il suffisso B è ambiguo se stai scrivendo in formato esadecimale (cosa significa 0xFFB?) e anche se avessimo una soluzione per questo o per un altro carattere di "B" (considerato "Y", F # lo usa) che nessuno poteva ricorda se l'impostazione predefinita era firmata o non firmata - lo sono i byte .NET non firmato per impostazione predefinita, quindi avrebbe senso scegliere B e SB ma tutti gli altri suffissi sono firmati per impostazione predefinita, quindi sarebbe coerente con suffissi di altro tipo per selezionare B e UB. Alla fine abbiamo scelto SB e UB non ambigui. - Anthony D. Green,
https://roslyn.codeplex.com/discussions/542111
È stato integrato alla prossima versione di VB.NET, ed è così che funzionerà:
Public Const MyByte As Byte = 4UB;
Public Const MyByte2 As SByte = 4SB;
Questa risposta non fornisce davvero un suffisso, ma è il più vicino possibile.
Se si definisce un metodo di estensione come
Imports System.Runtime.CompilerServices
Module IntegerExtensions
<Extension()> _
Public Function B(ByVal iNumber As Integer) As Byte
Return Convert.ToByte(iNumber)
End Function
End Module
Puoi usarlo in questo modo:
Private Function GetTheAnswerAsByte() As Byte
Return 42.B
End Function
Non c'è letterale byte in .NET.