Was ist das Suffix (Typ Zeichen) für „Byte“ numerische Konstanten in VB.NET?
Frage
Nur aus Neugier:
Ich weiß, ich kann dem Compiler sagen, wenn ich ein Wert will als eine bestimmte numerische Art interpretiert werden, z.B. als Integer (32 Bit signed), auf diese Weise ein "I" (Typ Zeichen) auf den konstanten Wert angehängt:
Private Function GetTheAnswerAsInteger() As Integer
Return 42I
End Function
Es gibt auch "S" für Short, "D" für Dezimal, etc.
Aber was ist das Suffix für Byte ? Hinweis: es ist nicht die offensichtlichste „B“ ...
Lösung
Es gibt nicht ein. Wenn Sie zwischen einer ganzen Zahl und einem Byte (z rufen eine angemessene Überlast) für eine konstante unterscheiden müssen, müssen Sie werfen.
(Das gleiche gilt in C #, übrigens.)
Byte hat keinen wörtlichen Typen Charakter oder Bezeichner Typ Charakter.
Es gibt auch eine Liste der Lettern und wörtliche Suffixe .
Andere Tipps
So fügten wir binäre Literale in VB im Herbst letztes Jahr und bekamen ähnliches Feedback von der frühen Tester. Wir haben entscheiden, ein Suffix für Byte für VB hinzuzufügen. Wir ließ sich auf SB (für Byte mit Vorzeichen) und UB (für Byte ohne Vorzeichen). Der Grund es ist nicht nur B und SB ist zweifach.
Eines, ist der B-Suffix nicht eindeutig, wenn Sie in hexadezimalen gerade schreiben (was bedeutet 0xFFB?) und auch wenn wir eine Lösung für das hatten, oder einen anderen Charakter als ‚B‘ ( ‚Y‘ angesehen wurde, verwendet diese F #) niemand könnte erinnern, ob der Standard wurde mit oder ohne Vorzeichen - .NET-Bytes standardmäßig ohne Vorzeichen, so wäre es sinnvoll, B und SB zu wählen, aber alle die anderen Suffixe sind standardmäßig signiert, so dass es im Einklang stehen mit anderem Typ B und Suffixe UB auszuwählen. Am Ende gingen wir eindeutige SB und UB. - Anthony D. Green,
https://roslyn.codeplex.com/discussions/542111
Es hat sich auf die kommende VB.NET Release integriert, und das ist so, wie es funktioniert:
Public Const MyByte As Byte = 4UB;
Public Const MyByte2 As SByte = 4SB;
Diese Antwort gibt nicht wirklich ein Suffix, aber es ist so nah wie es nur geht.
Wenn Sie definieren eine Erweiterungsmethode als
Imports System.Runtime.CompilerServices
Module IntegerExtensions
<Extension()> _
Public Function B(ByVal iNumber As Integer) As Byte
Return Convert.ToByte(iNumber)
End Function
End Module
Sie können es wie folgt verwendet werden:
Private Function GetTheAnswerAsByte() As Byte
Return 42.B
End Function
Es gibt keine Byte wörtlichen in .NET.