📄 objecttype.vb
字号:
If TC1 = TypeCode.Boolean Then short1 = -1S * Convert.ToInt16(obj1) Else short1 = Convert.ToInt16(obj1) End If If TC2 = TypeCode.Boolean Then short2 = -1S * Convert.ToInt16(obj2) Else short2 = Convert.ToInt16(obj2) End If Return (Convert.ToInt16(short1) And Convert.ToInt16(short2)) Case TypeCode.Int64 If TC1 = TypeCode.Boolean Then l1 = -1 * Convert.ToInt64(obj1) Else l1 = Convert.ToInt64(obj1) End If If TC2 = TypeCode.Boolean Then l2 = -1 * Convert.ToInt64(obj2) Else l2 = Convert.ToInt64(obj2) End If Return (Convert.ToInt64(l1) And Convert.ToInt64(l2)) Case TypeCode.Single sn1 = Convert.ToSingle(obj1) sn2 = Convert.ToSingle(obj2) Return (Convert.ToInt64(sn1) And Convert.ToInt64(sn2)) Case TypeCode.String If TC1 = TypeCode.Boolean Then dbl1 = -1 * Convert.ToDouble(obj1) Else dbl1 = Convert.ToDouble(obj1) End If If TC2 = TypeCode.Boolean Then dbl2 = -1 * Convert.ToDouble(obj2) Else dbl2 = Convert.ToDouble(obj2) End If Return (Convert.ToInt64(dbl1) And Convert.ToInt64(dbl2)) Case Else Throw New InvalidCastException End Select End Function Public Shared Function BitOrObj(ByVal obj1 As System.Object, ByVal obj2 As System.Object) As System.Object Dim dbl1 As Double Dim dbl2 As Double Dim sn1 As Single Dim sn2 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 '' FIXME: return typecode should be the second obj's typecode '' and not int64 all the time If (obj1 Is Nothing) Then Return Convert.ToInt64(obj2) End If If (obj2 Is Nothing) Then Return Convert.ToInt64(obj1) End If Dim TC1 As TypeCode = Type.GetTypeCode(obj1.GetType()) Dim TC2 As TypeCode = Type.GetTypeCode(obj2.GetType()) '' select the TypeCode to return Dim LTypeFound As TypeCode = BiggestTypeCode(obj1, obj2) Select Case (LTypeFound) Case TypeCode.Boolean Return ((BooleanType.FromObject(obj1)) Or (Convert.ToBoolean(obj2))) Case TypeCode.Byte Return ((ByteType.FromObject(obj1)) Or (Convert.ToByte(obj2))) Case TypeCode.Double If TC1 = TypeCode.Boolean Then dbl1 = -1 * Convert.ToDouble(obj1) Else dbl1 = Convert.ToDouble(obj1) End If If TC2 = TypeCode.Boolean Then dbl2 = -1 * Convert.ToDouble(obj2) Else dbl2 = Convert.ToDouble(obj2) End If Return (Convert.ToInt64(dbl1) Or Convert.ToInt64(dbl2)) Case TypeCode.Decimal If TC1 = TypeCode.Boolean Then dec1 = -1 * Convert.ToDecimal(obj1) Else dec1 = Convert.ToDecimal(obj1) End If If TC2 = TypeCode.Boolean Then dec2 = -1 * Convert.ToDecimal(obj2) Else dec2 = Convert.ToDecimal(obj2) End If Return (Convert.ToInt64(dec1) Or Convert.ToInt64(dec2)) Case TypeCode.Int32 If TC1 = TypeCode.Boolean Then i1 = -1 * Convert.ToInt32(obj1) Else i1 = Convert.ToInt32(obj1) End If If TC2 = TypeCode.Boolean Then i2 = -1 * Convert.ToInt32(obj2) Else i2 = Convert.ToInt32(obj2) End If Return (Convert.ToInt32(i1) Or Convert.ToInt32(i2)) Case TypeCode.Int16 If TC1 = TypeCode.Boolean Then short1 = -1S * Convert.ToInt16(obj1) Else short1 = Convert.ToInt16(obj1) End If If TC2 = TypeCode.Boolean Then short2 = -1S * Convert.ToInt16(obj2) Else short2 = Convert.ToInt16(obj2) End If Return (Convert.ToInt16(short1) Or Convert.ToInt16(short2)) Case TypeCode.Int64 If TC1 = TypeCode.Boolean Then l1 = -1 * Convert.ToInt64(obj1) Else l1 = Convert.ToInt64(obj1) End If If TC2 = TypeCode.Boolean Then l2 = -1 * Convert.ToInt64(obj2) Else l2 = Convert.ToInt64(obj2) End If Return (Convert.ToInt64(l1) Or Convert.ToInt64(l2)) Case TypeCode.Single sn1 = Convert.ToSingle(obj1) sn2 = Convert.ToSingle(obj2) Return (Convert.ToInt64(sn1) Or Convert.ToInt64(sn2)) Case TypeCode.String If TC1 = TypeCode.Boolean Then dbl1 = -1 * Convert.ToDouble(obj1) Else dbl1 = Convert.ToDouble(obj1) End If If TC2 = TypeCode.Boolean Then dbl2 = -1 * Convert.ToDouble(obj2) Else dbl2 = Convert.ToDouble(obj2) End If Return (Convert.ToInt64(dbl1) Or Convert.ToInt64(dbl2)) Case Else Throw New InvalidCastException End Select End Function Public Shared Function BitXorObj(ByVal obj1 As System.Object, ByVal obj2 As System.Object) As System.Object Dim dbl1 As Double Dim dbl2 As Double Dim sn1 As Single Dim sn2 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 '' FIXME: return typecode should be the second obj's typecode '' and not int64 all the time If (obj1 Is Nothing) Then Return Convert.ToInt64(obj2) End If If (obj2 Is Nothing) Then Return Convert.ToInt64(obj1) End If Dim TC1 As TypeCode = Type.GetTypeCode(obj1.GetType()) Dim TC2 As TypeCode = Type.GetTypeCode(obj2.GetType()) '' select the TypeCode to return Dim LTypeFound As TypeCode = BiggestTypeCode(obj1, obj2) Select Case (LTypeFound) Case TypeCode.Boolean Return ((BooleanType.FromObject(obj1)) Xor (Convert.ToBoolean(obj2))) Case TypeCode.Byte Return ((ByteType.FromObject(obj1)) Xor (Convert.ToByte(obj2))) Case TypeCode.Double If TC1 = TypeCode.Boolean Then dbl1 = -1 * Convert.ToDouble(obj1) Else dbl1 = Convert.ToDouble(obj1) End If If TC2 = TypeCode.Boolean Then dbl2 = -1 * Convert.ToDouble(obj2) Else dbl2 = Convert.ToDouble(obj2) End If Return (Convert.ToInt64(dbl1) Xor Convert.ToInt64(dbl2)) Case TypeCode.Decimal If TC1 = TypeCode.Boolean Then dec1 = -1 * Convert.ToDecimal(obj1) Else dec1 = Convert.ToDecimal(obj1) End If If TC2 = TypeCode.Boolean Then dec2 = -1 * Convert.ToDecimal(obj2) Else dec2 = Convert.ToDecimal(obj2) End If Return (Convert.ToInt64(dec1) Xor Convert.ToInt64(dec2)) Case TypeCode.Int32 If TC1 = TypeCode.Boolean Then i1 = -1 * Convert.ToInt32(obj1) Else i1 = Convert.ToInt32(obj1) End If If TC2 = TypeCode.Boolean Then i2 = -1 * Convert.ToInt32(obj2) Else i2 = Convert.ToInt32(obj2) End If Return (Convert.ToInt32(i1) Xor Convert.ToInt32(i2)) Case TypeCode.Int16 If TC1 = TypeCode.Boolean Then short1 = -1S * Convert.ToInt16(obj1) Else short1 = Convert.ToInt16(obj1) End If If TC2 = TypeCode.Boolean Then short2 = -1S * Convert.ToInt16(obj2) Else short2 = Convert.ToInt16(obj2) End If Return (Convert.ToInt16(short1) Xor Convert.ToInt16(short2)) Case TypeCode.Int64 If TC1 = TypeCode.Boolean Then l1 = -1 * Convert.ToInt64(obj1) Else l1 = Convert.ToInt64(obj1) End If If TC2 = TypeCode.Boolean Then l2 = -1 * Convert.ToInt64(obj2) Else l2 = Convert.ToInt64(obj2) End If Return (Convert.ToInt64(l1) Xor Convert.ToInt64(l2)) Case TypeCode.Single If TC1 = TypeCode.Boolean Then sn1 = -1 * Convert.ToSingle(obj1) Else sn1 = Convert.ToSingle(obj1) End If If TC2 = TypeCode.Boolean Then sn2 = -1 * Convert.ToSingle(obj2) Else sn2 = Convert.ToSingle(obj2) End If Return (Convert.ToInt64(sn1) Xor Convert.ToInt64(sn2)) Case TypeCode.String If TC1 = TypeCode.Boolean Then dbl1 = -1 * Convert.ToDouble(obj1) Else dbl1 = Convert.ToDouble(obj1) End If If TC2 = TypeCode.Boolean Then dbl2 = -1 * Convert.ToDouble(obj2) Else dbl2 = Convert.ToDouble(obj2) End If Return (Convert.ToInt64(dbl1) Xor Convert.ToInt64(dbl2)) Case Else Throw New InvalidCastException End Select End Function Public Shared Function AddObj(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) End If If (o2 Is Nothing) Then o2 = CreateNullObjectType(o1) End If 'FIXME: Add defense for checking overflow. 'FIXME: Add support for Date 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) And (TypeOf o2 Is String)) Or _ ((TypeOf o1 Is Char) And (TypeOf o2 Is Char)) Or _ ((TypeOf o1 Is String) And (TypeOf o2 Is Char)) Or _ ((TypeOf o1 Is Char) And (TypeOf o2 Is String)) Then ' both are String, its a Concat ' both are Char, its a Concat ' one is String and one is Char, its a Concat s1 = Convert.ToString(o1) s2 = Convert.ToString(o2) Return s1 + s2 ElseIf (TypeOf o1 Is String) Or (TypeOf o2 Is String) Then ' one is String, its a numeric Add 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 SubObj(ByVal o1 As System.Object, ByVal o2 As System.Object) As System.Object Dim b1 As Byte
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -