Typumwandlung bei generischen Klassen

02/11/2009 - 15:36 von Gerrit Kuhlendahl | Report spam
Moinsen!

Ich kàmpf hier grad mit einem kleinen Problem:

Ich habe eine TLV-BasisKlasse, deren Ableitungen typisiert
sein sollen. Die Unterschiede liegen nur in der Value-Eigenschaft.

Allerdings funktioniert die Typumwandlung nicht, wenn ich die Daten
aus dem jeweiligen Byte-Array in den entsprechenden Typen àndern
möchte (siehe Code). Hat da jemand eine Idee...?


Public Class KsTlvBinNative(Of NativeType)
Inherits KsTlvBinBase

'Endgültigen Typen ermitteln
Dim Tmp As NativeType
Dim TC As TypeCode = Type.GetTypeCode(Tmp.GetType())

Public Sub New()
Try
Select Case TC
Case TypeCode.Boolean
mBytTypId = &HD
Case TypeCode.Byte
mBytTypId = &H1
Case TypeCode.DateTime
mBytTypId = &HB
Case TypeCode.Decimal
mBytTypId = &HC
Case TypeCode.Double
mBytTypId = &HA
Case TypeCode.Int16
mBytTypId = &H4
Case TypeCode.Int32
mBytTypId = &H6
Case TypeCode.Int64
mBytTypId = &H8
Case TypeCode.SByte
mBytTypId = &H2
Case TypeCode.Single
mBytTypId = &H9
Case TypeCode.String
mBytTypId = &H20
Case TypeCode.UInt16
mBytTypId = &H3
Case TypeCode.UInt32
mBytTypId = &H5
Case TypeCode.UInt64
mBytTypId = &H7
Case Else
Throw New ApplicationException("Type is not supported by this generic class")
End Select
Catch ex As Exception
Throw New TypeInitializationException(GetType(TmxData).FullName, ex)
End Try
End Sub

Public Property Value() As NativeType
Get

Try
Select Case TC
Case TypeCode.Boolean
'Diese Zeile liefert einen Compiler-Fehler (Typ unterstützt die Konvertierung nicht)
'Return CType(Convert.ToBoolean(MyBase.GetDataBytes), NativeType)
'Diese Zeile ebenfalls:
Return Convert.ToBoolean(MyBase.GetDataBytes)
Case TypeCode.Byte
Case TypeCode.DateTime
Case TypeCode.Decimal
Case TypeCode.Double
Case TypeCode.Int16
Case TypeCode.Int32
Case TypeCode.Int64
Case TypeCode.SByte
Case TypeCode.Single
Case TypeCode.String
Case TypeCode.UInt16
Case TypeCode.UInt32
Case TypeCode.UInt64
Case Else
' Throw New ApplicationException("Type is not supported by this generic class")
End Select
Catch ex As Exception
Throw New KuhSoft.Common.DAP.DAPBaseException("Error while converting to datatype """ & Tmp.GetType.FullName & """", "prop.Value.Get", ex)
End Try
End Get
Set(ByVal value As NativeType)

End Set
End Property
End Class

Viele Grüße

Gerrit



KUH-SOFT - Die Software von glücklichen Programmierern
 

Lesen sie die antworten

#1 Gerrit Kuhlendahl
02/11/2009 - 15:55 | Warnen spam
NACHTRAG:

Die Möglichkeit mit

Return CType(Convert.ToBoolean(MyBase.GetDataBytes), Object)

möchte ich eigentlich vermeiden, da mir das nicht typsicher genug ist...

Viele Grüße

Gerrit



KUH-SOFT - Die Software von glücklichen Programmierern

Ähnliche fragen