2008-10-31 11 views
23

Solo por curiosidad:¿Cuál es el sufijo (carácter de tipo) para las constantes numéricas de "Byte" en VB.NET?

Sé que puedo decirle al compilador si quiero que un valor se interprete como cierto tipo numérico, p. como entero (32 bits con signo), de esta forma añadiendo una "I" (tipo de caracteres) para el valor constante:

Private Function GetTheAnswerAsInteger() As Integer 

    Return 42I 

End Function 

También hay "S" para abreviar, "D" para decimal, etc.

¿Pero cuál es el sufijo para Byte? Sugerencia: no es el obvio "B" ...

Respuesta

30

No hay ninguna. Si necesita distinguir entre un número entero y un byte (por ejemplo, para llamar a una sobrecarga adecuada) para una constante, debe emitir.

(Lo mismo es cierto en C#, por cierto.)

MSDN provides confirmation:

Byte no tiene carácter de tipo literal o tipo de identificador de carácter.

También hay un list of type characters and literal suffixes.

+11

poco pobre Byte, ni siquiera tiene un tipo literal carácter ... ;-) – splattne

+0

Para gente de C#, esta sección de la especificación muestra las distintas opciones. http://msdn.microsoft.com/en-us/library/aa664674%28VS.71%29.aspx – AverageAdam

+0

@JonSkeet - Tomando nota de las otras respuestas aquí sobre la adición a Roslyn de 'SB' y' UB' en 2015, ¿Por qué aún no puedo usar estos en mi VB (VS 2017)? ¿Debo ajustar alguna configuración? – Toby

3

No hay un byte literal en .NET.

+0

No es ahora (por https://roslyn.codeplex.com/discussions/542111) –

5

Esta respuesta realmente no proporciona un sufijo, pero está lo más cerca posible.

Si se define un método de extensión 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 

Se puede utilizar la siguiente manera:

Private Function GetTheAnswerAsByte() As Byte 

    Return 42.B 

End Function 
+1

+1. Aunque esto probablemente no funcionará dentro de la sección de constantes. – Neolisk

6

Por lo tanto, hemos añadido literales binarios en VB pasado otoño y tiene retroalimentación similares de primeros probadores. Decidimos agregar un sufijo para byte para VB. Nosotros nos decidimos por SB (para byte con signo) y UB (por byte sin signo). La razón no es solo B y SB es doble.

Uno, el sufijo B es ambigua si usted está escribiendo en hexadecimal (lo que quiere decir 0xFFB?) E incluso si tuviéramos una solución para eso, o de otro carácter que 'B' ('Y' se consideró , F # usa esto) nadie podría recordar si el valor predeterminado fue firmado o no - los bytes .NET son sin firmar de forma predeterminada, por lo que tendría sentido seleccionar B y SB pero todos los demás sufijos están por defecto, por lo que sería consistente con otros sufijos de tipo para seleccionar B y UB. Al final fuimos por inequívocos SB y UB. - Anthony D. Green,

https://roslyn.codeplex.com/discussions/542111

Se ha integrado a la próxima VB.NET liberación, y esta es la forma en que funcionará:

Public Const MyByte As Byte = 4UB; 
Public Const MyByte2 As SByte = 4SB; 
Cuestiones relacionadas