| File: Microsoft\VisualBasic\CompilerServices\ByteType.vb | Web Access |
| Project: src\runtime\src\libraries\Microsoft.VisualBasic.Core\src\Microsoft.VisualBasic.Core.vbproj (Microsoft.VisualBasic.Core) |
' Licensed to the .NET Foundation under one or more agreements. ' The .NET Foundation licenses this file to you under the MIT license. Imports System Imports Microsoft.VisualBasic.CompilerServices.Utils Namespace Microsoft.VisualBasic.CompilerServices <System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)> Public NotInheritable Class ByteType ' Prevent creation. Private Sub New() End Sub Public Shared Function FromString(ByVal Value As String) As Byte If Value Is Nothing Then Return 0 End If Try Dim i64Value As Int64 If IsHexOrOctValue(Value, i64Value) Then Return CByte(i64Value) End If Return CByte(DoubleType.Parse(Value)) Catch e As FormatException Throw New InvalidCastException(SR.Format(SR.InvalidCast_FromStringTo, Left(Value, 32), "Byte"), e) 'UNSIGNED: make these strings constants End Try End Function Public Shared Function FromObject(ByVal Value As Object) As Byte If Value Is Nothing Then Return 0 End If Dim ValueInterface As IConvertible Dim ValueTypeCode As TypeCode ValueInterface = TryCast(Value, IConvertible) If ValueInterface Is Nothing Then GoTo ThrowInvalidCast End If ValueTypeCode = ValueInterface.GetTypeCode() Select Case ValueTypeCode Case TypeCode.Boolean Return CByte(ValueInterface.ToBoolean(Nothing)) Case TypeCode.Byte If TypeOf Value Is System.Byte Then Return CByte(DirectCast(Value, Byte)) Else Return CByte(ValueInterface.ToByte(Nothing)) End If Case TypeCode.Int16 If TypeOf Value Is System.Int16 Then Return CByte(DirectCast(Value, Int16)) Else Return CByte(ValueInterface.ToInt16(Nothing)) End If Case TypeCode.Int32 If TypeOf Value Is System.Int32 Then Return CByte(DirectCast(Value, Int32)) Else Return CByte(ValueInterface.ToInt32(Nothing)) End If Case TypeCode.Int64 If TypeOf Value Is System.Int64 Then Return CByte(DirectCast(Value, Int64)) Else Return CByte(ValueInterface.ToInt64(Nothing)) End If Case TypeCode.Single If TypeOf Value Is System.Single Then Return CByte(DirectCast(Value, Single)) Else Return CByte(ValueInterface.ToSingle(Nothing)) End If Case TypeCode.Double If TypeOf Value Is System.Double Then Return CByte(DirectCast(Value, Double)) Else Return CByte(ValueInterface.ToDouble(Nothing)) End If Case TypeCode.Decimal 'Do not use .ToDecimal because of jit temp issue effects all perf Return DecimalToByte(ValueInterface) Case TypeCode.String Return ByteType.FromString(ValueInterface.ToString(Nothing)) Case TypeCode.Char, TypeCode.DateTime ' Fall through to error Case Else ' Fall through to error End Select ThrowInvalidCast: Throw New InvalidCastException(SR.Format(SR.InvalidCast_FromTo, VBFriendlyName(Value), "Byte")) End Function Private Shared Function DecimalToByte(ByVal ValueInterface As IConvertible) As Byte Return CByte(ValueInterface.ToDecimal(Nothing)) End Function End Class End Namespace