📄 objecttype.vb
字号:
Dim b2 As Byte Dim bool1 As Boolean Dim bool2 As Boolean Dim dbl1 As Double Dim dbl2 As Double Dim f1 As Single Dim f2 As Single Dim dec1 As Decimal Dim dec2 As Decimal Dim l1 As Long Dim l2 As Long Dim i1 As Integer Dim i2 As Integer Dim short1 As Short Dim short2 As Short Dim s1 As String Dim s2 As String ' comparing null objects ' if both are null, return 0 ' if one is a type, convert the other to its 'null value' If (o1 Is Nothing) And (o2 Is Nothing) Then Return 0 End If If (o1 Is Nothing) Then o1 = CreateNullObjectType(o2) End If If (o2 Is Nothing) Then o2 = CreateNullObjectType(o1) End If 'FIXME: Add defense for checking overflow. If (TypeOf o1 Is Boolean) Then bool1 = Convert.ToBoolean(o1) ' bool2 = Convert.ToBoolean(o2) Return ((-1 * (Convert.ToInt32(bool1)) - Convert.ToInt32(o2))) ElseIf (TypeOf o2 Is Boolean) Then 'bool1 = Convert.ToBoolean(o1) bool2 = Convert.ToBoolean(o2) Return ((Convert.ToInt32(o1) - (-1 * Convert.ToInt32(bool2)))) ElseIf (TypeOf o1 Is Double) Or (TypeOf o2 Is Double) Then dbl1 = Convert.ToDouble(o1) dbl2 = Convert.ToDouble(o2) Return dbl1 - dbl2 ElseIf (TypeOf o1 Is Single) Or (TypeOf o2 Is Single) Then f1 = Convert.ToSingle(o1) f2 = Convert.ToSingle(o2) Return f1 - f2 ElseIf (TypeOf o1 Is Decimal) Or (TypeOf o2 Is Decimal) Then dec1 = Convert.ToDecimal(o1) dec2 = Convert.ToDecimal(o2) Return dec1 - dec2 ElseIf (TypeOf o1 Is Long) Or (TypeOf o2 Is Long) Then l1 = Convert.ToInt64(o1) l2 = Convert.ToInt64(o2) Return l1 - l2 ElseIf (TypeOf o1 Is Integer) Or (TypeOf o2 Is Integer) Then i1 = Convert.ToInt32(o1) i2 = Convert.ToInt32(o2) Return i1 - i2 ElseIf (TypeOf o1 Is Short) Or (TypeOf o2 Is Short) Then short1 = Convert.ToInt16(o1) short2 = Convert.ToInt16(o2) Return short1 - short2 ElseIf (TypeOf o1 Is Byte) Or (TypeOf o2 Is Byte) Then b1 = Convert.ToByte(o1) b2 = Convert.ToByte(o2) Return b1 - b2 ElseIf (TypeOf o1 Is String) Or (TypeOf o2 Is String) Then s1 = Convert.ToString(o1) s2 = Convert.ToString(o2) If s1 = "" Then s1 = "0" If s2 = "" Then s2 = "0" dbl1 = Convert.ToDouble(s1) dbl2 = Convert.ToDouble(s2) Return dbl1 - dbl2 Else ' Not implemented case Throw GetCaseNotImplemented("Implement me: " + o1.GetType.Name + " " + o2.GetType.Name) End If End Function Public Shared Function MulObj(ByVal o1 As System.Object, ByVal o2 As System.Object) As System.Object Dim b1 As Byte Dim b2 As Byte Dim bool1 As Boolean Dim bool2 As Boolean Dim dbl1 As Double Dim dbl2 As Double Dim f1 As Single Dim f2 As Single Dim dec1 As Decimal Dim dec2 As Decimal Dim l1 As Long Dim l2 As Long Dim i1 As Integer Dim i2 As Integer Dim short1 As Short Dim short2 As Short Dim s1 As String Dim s2 As String ' comparing null objects ' if both are null, return 0 ' if one is a type, convert the other to its 'null value' If (o1 Is Nothing) And (o2 Is Nothing) Then Return 0 End If If (o1 Is Nothing) Then o1 = CreateNullObjectType(o2) ' multiple of zero and x is zero Return o1 End If If (o2 Is Nothing) Then o2 = CreateNullObjectType(o1) ' multiple of x and zero is zero Return o2 End If 'FIXME: Add ElseIf implementation for all types. 'FIXME: Add defense for checking overflow. If (TypeOf o1 Is Double) Or (TypeOf o2 Is Double) Then dbl1 = Convert.ToDouble(o1) dbl2 = Convert.ToDouble(o2) Return dbl1 * dbl2 ElseIf (TypeOf o1 Is Single) Or (TypeOf o2 Is Single) Then f1 = Convert.ToSingle(o1) f2 = Convert.ToSingle(o2) Return f1 * f2 ElseIf (TypeOf o1 Is Decimal) Or (TypeOf o2 Is Decimal) Then dec1 = Convert.ToDecimal(o1) dec2 = Convert.ToDecimal(o2) Return dec1 * dec2 ElseIf (TypeOf o1 Is Long) Or (TypeOf o2 Is Long) Then l1 = Convert.ToInt64(o1) l2 = Convert.ToInt64(o2) Return l1 * l2 ElseIf (TypeOf o1 Is Integer) Or (TypeOf o2 Is Integer) Then i1 = Convert.ToInt32(o1) i2 = Convert.ToInt32(o2) Return i1 * i2 ElseIf (TypeOf o1 Is Short) Or (TypeOf o2 Is Short) Then short1 = Convert.ToInt16(o1) short2 = Convert.ToInt16(o2) Return short1 * short2 ElseIf (TypeOf o1 Is Byte) Or (TypeOf o2 Is Byte) Then b1 = Convert.ToByte(o1) b2 = Convert.ToByte(o2) Return b1 * b2 ElseIf (TypeOf o1 Is Boolean) Or (TypeOf o2 Is Boolean) Then bool1 = Convert.ToBoolean(o1) bool2 = Convert.ToBoolean(o2) Return Convert.ToInt16(bool1) * Convert.ToInt16(bool2) ElseIf (TypeOf o1 Is String) Or (TypeOf o2 Is String) Then s1 = Convert.ToString(o1) s2 = Convert.ToString(o2) If s1 = "" Then s1 = "0" If s2 = "" Then s2 = "0" dbl1 = Convert.ToDouble(s1) dbl2 = Convert.ToDouble(s2) Return dbl1 * dbl2 Else ' Not implemented case Throw GetCaseNotImplemented("Implement me: " + o1.GetType.Name + " " + o2.GetType.Name) End If End Function Public Shared Function DivObj(ByVal o1 As System.Object, ByVal o2 As System.Object) As System.Object Dim b1 As Byte Dim b2 As Byte Dim bool1 As Boolean Dim bool2 As Boolean Dim dbl1 As Double Dim dbl2 As Double Dim f1 As Single Dim f2 As Single Dim dec1 As Decimal Dim dec2 As Decimal Dim l1 As Long Dim l2 As Long Dim i1 As Integer Dim i2 As Integer Dim short1 As Short Dim short2 As Short Dim s1 As String Dim s2 As String ' comparing null objects ' if both are null, return 0 ' if one is a type, convert the other to its 'null value' If (o1 Is Nothing) And (o2 Is Nothing) Then Return 0 End If 'FIXME: Add checks for Nothing If (o1 Is Nothing) Then o1 = CreateNullObjectType(o2) ' divide of zero and x is infinite Throw GetCaseNotImplemented("implement me") End If If (o2 Is Nothing) Then o2 = CreateNullObjectType(o1) ' divide of x and zero is exception Throw New DivideByZeroException End If 'FIXME: Add ElseIf implementation for all types. 'FIXME: Add defense for checking overflow. If (TypeOf o1 Is Double) Or (TypeOf o2 Is Double) Then dbl1 = Convert.ToDouble(o1) dbl2 = Convert.ToDouble(o2) Return dbl1 / dbl2 ElseIf (TypeOf o1 Is Single) Or (TypeOf o2 Is Single) Then f1 = Convert.ToSingle(o1) f2 = Convert.ToSingle(o2) Return f1 / f2 ElseIf (TypeOf o1 Is Decimal) Or (TypeOf o2 Is Decimal) Then dec1 = Convert.ToDecimal(o1) dec2 = Convert.ToDecimal(o2) Return dec1 / dec2 ElseIf (TypeOf o1 Is Long) Or (TypeOf o2 Is Long) Then l1 = Convert.ToInt64(o1) l2 = Convert.ToInt64(o2) Return l1 / l2 ElseIf (TypeOf o1 Is Integer) Or (TypeOf o2 Is Integer) Then i1 = Convert.ToInt32(o1) i2 = Convert.ToInt32(o2) Return i1 / i2 ElseIf (TypeOf o1 Is Short) Or (TypeOf o2 Is Short) Then short1 = Convert.ToInt16(o1) short2 = Convert.ToInt16(o2) Return short1 / short2 ElseIf (TypeOf o1 Is Byte) Or (TypeOf o2 Is Byte) Then b1 = Convert.ToByte(o1) b2 = Convert.ToByte(o2) Return b1 / b2 ElseIf (TypeOf o1 Is Boolean) Or (TypeOf o2 Is Boolean) Then bool1 = Convert.ToBoolean(o1) bool2 = Convert.ToBoolean(o2) Return Convert.ToInt16(bool1) / Convert.ToInt16(bool2) ElseIf (TypeOf o1 Is String) Or (TypeOf o2 Is String) Then s1 = Convert.ToString(o1) s2 = Convert.ToString(o2) If s1 = "" Then s1 = "0" If s2 = "" Then s2 = "0" dbl1 = Convert.ToDouble(s1) dbl2 = Convert.ToDouble(s2) Return dbl1 / dbl2 Else ' Not implemented case Throw GetCaseNotImplemented("Implement me: " + o1.GetType.Name + " " + o2.GetType.Name) End If End Function Public Shared Function PowObj(ByVal o1 As System.Object, ByVal o2 As System.Object) As System.Object Dim dbl1 As Double Dim dbl2 As Double ' comparing null objects ' if both are null, return 0 ' if one is a type, convert the other to its 'null value' If (o1 Is Nothing) And (o2 Is Nothing) Then Return 0 End If If (o1 Is Nothing) Then o1 = CreateNullObjectType(o2) End If If (o2 Is Nothing) Then o2 = CreateNullObjectType(o1) End If 'FIXME: Add defense for checking overflow. dbl1 = Convert.ToDouble(o1) dbl2 = Convert.ToDouble(o2) Return Math.Pow(dbl1, dbl2) End Function Public Shared Function ShiftLeftObj(ByVal o1 As Object, ByVal amount As Integer) As Object Throw New NotImplementedException End Function Public Shared Function ShiftRightObj(ByVal o1 As Object, ByVal amount As Integer) As Object Throw New NotImplementedException End Function Public Shared Function ModObj(ByVal o1 As System.Object, ByVal o2 As System.Object) As System.Object Throw New NotImplementedException End Function Public Shared Function IDivObj(ByVal o1 As System.Object, ByVal o2 As System.Object) As System.Object Throw New NotImplementedException End Function Public Shared Function XorObj(ByVal obj1 As System.Object, ByVal obj2 As System.Object) As System.Object Throw New NotImplementedException End Function Public Shared Function LikeObj(ByVal vLeft As System.Object, ByVal vRight As System.Object, ByVal CompareOption As Microsoft.VisualBasic.CompareMethod) As System.Boolean Dim strLeft As String = StringType.FromObject(vLeft) Dim strRight As String = StringType.FromObject(vRight) Return StringType.StrLike(strLeft, strRight, CompareOption) End Function Public Shared Function StrCatObj(ByVal vLeft As System.Object, ByVal vRight As System.Object) As System.Object If TypeOf vLeft Is DBNull Then vLeft = "" If TypeOf vRight Is DBNull Then vRight = "" Dim strLeft As String = StringType.FromObject(vLeft) Dim strRight As String = StringType.FromObject(vRight) Return strLeft & strRight End Function Public Shared Function GetObjectValuePrimitive(ByVal o As System.Object) As System.Object Throw New NotImplementedException End Function 'creates a real type of a Nothing object Private Shared Function CreateNullObjectType(ByVal otype As Object) As Object If TypeOf otype Is Byte Then Return Convert.ToByte(0) ElseIf TypeOf otype Is Boolean Then Return Convert.ToBoolean(False) ElseIf TypeOf otype Is Long Then Return Convert.ToInt64(0) ElseIf TypeOf otype Is Decimal Then Return Convert.ToDecimal(0) ElseIf TypeOf otype Is Short Then Return Convert.ToInt16(0) ElseIf TypeOf otype Is Integer Then Return Convert.ToInt32(0) ElseIf TypeOf otype Is Double Then Return Convert.ToDouble(0) ElseIf TypeOf otype Is Single Then Return Convert.ToSingle(0) ElseIf TypeOf otype Is String Then Return Convert.ToString("") ElseIf TypeOf otype Is Char Then Return Convert.ToChar(0) ElseIf TypeOf otype Is Date Then Return Nothing Else Throw GetCaseNotImplemented("Implement me: " + otype.GetType.Name) End If End Function End ClassEnd Namespace
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -